首页 > 解决方案 > 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 指南,但不确定有多少人需要知道。

标签: pythonpandas

解决方案


拿到桌子后,就做

pd.concat(tables)

推荐阅读