通过Excel工作表的Python循环,放入一个df
我有一个Excel文件foo.xlsx
与大约40个片材sh1
,sh2
等。每个片材的格式是:
area cnt name\nparty1 name\nparty2
blah 9 5 5
word 3 7 5
在每个工作表中,我想使用格式将vars重命名name\nparty
为仅将party
用作标签。输出示例:
area cnt party1 party2 sheet
bacon 9 5 5 sh1
spam 3 7 5 sh1
eggs 2 18 4 sh2
我正在用以下文件读取文件:
book = pd.ExcelFile(path)
然后想知道我是否需要做:
for f in filelist:
df = pd.ExcelFile.parse(book,sheetname=??)
'more operations here'
# only change column names 2 and 3
i, col in enumerate(df):
if i>=2 and i<=3:
new_col_name = col.split("\n")[-1]
df[new_col_name] =
或类似的东西?
-
截至2019-09-09更新:
使用
sheet_name
了v0.25.1代替sheetname
如果设置关键字parameter
read_excel
,则pandas
可以使用方法一次读取所有工作表sheetname=None
。这将返回一个字典-
键是工作表名称,值是作为数据帧的工作表。使用这个,我们可以简单地遍历字典并:
- 在包含相关工作表名称的数据框中添加额外的列
- 使用
rename
方法来重命名我们的列-通过使用lambda
,我们只要在有新行时就分割列表的每个列名,就可以获取列表的最后一个条目。如果没有新行,则列名不变。 - 附加到“全表”
完成此操作后,我们将重置索引,并且一切都将恢复正常。注意:如果您在一个工作表上有聚会,但在其他工作表上却没有,则仍然可以使用,但是会用填充每个工作表的所有缺失列
NaN
。import pandas as pd sheets_dict = pd.read_excel('Book1.xlsx', sheetname=None) full_table = pd.DataFrame() for name, sheet in sheets_dict.items(): sheet['sheet'] = name sheet = sheet.rename(columns=lambda x: x.split('\n')[-1]) full_table = full_table.append(sheet) full_table.reset_index(inplace=True, drop=True) print full_table
印刷品:
area cnt party1 party2 sheet 0 bacon 9 5 5 Sheet1 1 spam 3 7 5 Sheet1 2 eggs 2 18 4 Sheet2