python - pd.concat 键来分隔列
问题描述
我有几个从 Excel 文件导入的表:
df = pd.read_excel(ffile, 'Constraints', header = None, names = range(13))
table_names = ['A', ...., 'W']
groups = df[0].isin(table_names).cumsum()
tables = {g.iloc[0,0]: g.iloc[1:] for k,g in df.groupby(groups)}
这是我第一次尝试从一张纸上读取多个表格,所以我不确定这是否是最好的方式。如果这样打印:
for k,v in tables.items():
print("table:", k)
print(v)
print()
输出是:
table: A
0 1 2 ... 10 11 12
2 Sxxxxxx Dxxx 21 20 ... 22 19 22
3 Rxxx Sxxxx / Lxxx Cxxxxxxxxxxx 7 7 ... 7 7 7
4 AVG Sxxxx per xxx @ xx% Pxxxxxxxxxxxx 5 X 5.95 5.95 ... 5.95 5.95 5.95
...
...
...
table: W
0 1 2 ... 10 11 12
6 Sxxxxxx Dxxx 21 20 ... 22 19 22
7 Rxxx Sxxxx / Lxxx Cxxxxxxxxxxx 30 30 ... 30 30 30
8 AVG Sxxxx per xxx @ xx% Pxxxxxxxxxxxx 5 x 28.5 28.5 ... 28.5 28.5 28.5
我尝试将它们全部组合到一个 DataFrame 中,使用 dfa = pd.DataFrame(tables['A'])
每个表,然后使用fdf = pd.concat([dfa,...,dwf], keys =['A', ... 'W'])
.
键是分层放置的,但自动编号的索引列会在键之后和第一列之前插入自身:
0 1 2 ... 10 11 12
A 2 Sxxxxxx Dxxx 21 20 ... 22 19 22
3 Rxxx Sxxxx / Lxxx Cxxxxxxxxxxx 7 7 ... 7 7 7
4 AVG Sxxxx per xxx @ xx% Pxxxxxxxxxxxx 5 X 5.95 5.95 ... 5.95 5.95 5.95
我想将键转换为实际列并使用熊猫编号索引切换位置,但我不知道该怎么做。我已经尝试pd.reset_index()
过各种配置,但我想知道我是否可能一开始就错误地构建了表格?
如果这些信息中的任何一个不是必需的,请告诉我,我将删除它。我正在尝试遵循 MCV 指南,但不确定有多少人需要知道。
解决方案
拿到桌子后,就做
pd.concat(tables)
推荐阅读
- bash - 如果 `if [ ]` 中存在语法问题,如何使脚本提前退出?
- javascript - jqBootstrapValidation.js attr,从 json 文件翻译 data-validation-required-message
- node.js - NodeJs,试图了解 req.body 访问性能
- node.js - 使用 xml-crypto nodejs lib 生成的签名时出现无效签名错误
- c# - 将用户输入作为字符串并将其转换为可执行代码 C#
- api - 如何通过 API 以编程方式在 Microsoft Store 上创建订阅插件
- javascript - 在运行时更改 setInterval() 方法中的时间段
- javascript - 如何将时间舍入到小时和分钟而不是小时、分钟和秒?
- java - 从其他 java 项目编译 java 项目
- java - 使用 hive 上下文对包含数字的字符串列进行排序