pd.concat键以分隔列

时间:2019-05-09 16:06:57

标签: python pandas

我有几个从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

我尝试使用dfa = pd.DataFrame(tables['A'])将它们全部合并为一个DataFrame。
每个表,然后使用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准则,不确定是否需要了解多少人。

1 个答案:

答案 0 :(得分:0)

获取表格后,只需

pd.concat(tables)