用 pandas 解析打印精美的表格数据

2024-02-17

复制包含不同分隔符、列名中的空格等的表的最佳方法是什么?该函数pd.read_clipboard()无法自行管理此任务。

示例1:

| Age Category | A | B  | C  | D |
|--------------|---|----|----|---|
| 21-26        | 2 | 2  | 4  | 1 |
| 26-31        | 7 | 11 | 12 | 5 |
| 31-36        | 3 | 5  | 5  | 2 |
| 36-41        | 2 | 4  | 1  | 7 |
| 41-46        | 0 | 1  | 3  | 2 |
| 46-51        | 0 | 0  | 2  | 3 |

预期结果:

 Age Category  A  B   C   D    
 21-26         2  2   4   1 
 26-31         7  11  12  5 
 31-36         3  5   5   2 
 36-41         2  4   1   7 
 41-46         0  1   3   2 
 46-51         0  0   2   3

EDIT:

示例2:

+---+---------+--------+
| id|firstName|lastName|
+---+---------+--------+
|  1|     Mark|   Brown|
|  2|      Tom|Anderson|
|  3|   Joshua|Peterson|
+---+---------+--------+

预期结果:

   id firstName  lastName
0   1      Mark     Brown
1   2       Tom  Anderson
2   3    Joshua  Peterson

我寻找一种可以应用于最常见表类型的通用方法。


之所以如此复杂,是因为这些类型的 ASCII 表在设计时并未真正考虑到数据传输。它们的真正功能是以视觉上令人愉悦的方式描绘数据。

这并不意味着不能用它来转移到 pandas 中!让我们从.read_clipboard():

df = pd.read_clipboard(sep='|').iloc[1:,1:-1]

我们定义的不是使用逗号作为(默认)分隔符|作为分隔符。

The .iloc[1:,1:-1]去掉第一行(-----------)和第一列和最后一列:因为尾随|在每行的开头和结尾pandas在那里看到一个“空”列。

现在剩下的就是从列名和值中去除空格:

stripped_columns = []
for column_name in df.columns:
    df[column_name] = df[column_name].str.strip()
    stripped_columns.append(column_name.strip())
df.columns = stripped_columns

如果你想要Age Category成为你的索引:

df.set_index('Age Category', inplace=True)

我要做的最后一步是确保所有列现在实际上保存的是数字而不是字符串:

df = df.astype('int')

导致:

<class 'pandas.core.frame.DataFrame'>
Index: 6 entries, 21-26 to 46-51
Data columns (total 4 columns):
A    6 non-null int64
B    6 non-null int64
C    6 non-null int64
D    6 non-null int64
dtypes: int64(4)
memory usage: 400.0+ bytes

我不确定您从剪贴板中读取它的原因是什么。更优雅的解决方案可能是将其粘贴到.csv归档并使用更高级的功能.read_csv() https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html必须提供。然而,必要的转变将保持不变。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用 pandas 解析打印精美的表格数据 的相关文章

随机推荐