我有几个从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准则,不确定是否需要了解多少人。
答案 0 :(得分:0)
获取表格后,只需
pd.concat(tables)