连接所有 sheet 个文件并在 Python 中创建一个包含 sheet 个名称的新列
Concatenate all sheet files and create one new column with sheet names in Python
给定一个 excel 文件 test.xlsx,其中有许多 sheet:1.DC
、2.SH
和 3.GZ
等
import xlrd
dfs = xlrd.open_workbook('./test.xlsx', on_demand = True)
print(dfs.sheet_names())
输出:
['1.DC', '2.SH', '3.GZ']
我如何读取并连接所有 sheet 并创建一个包含 sheet 名称的新列,同时删除每个 sheet 名称开头部分的 1., 2., 3., etc.
?
预期的结果是这样的:
使用 read_excel
和 sheet_name=None
将所有工作表转换为 DataFrame
s:
dfs = pd.read_excel('test.xlsx', sheet_name=None)
dfs = {k: v.loc[:, ~v.columns.str.contains('Unnamed')] for k, v in dfs.items()}
# print(dfs)
然后如果需要一列,请使用 lsit comparehension 与 select 这一列,此处 name
df = pd.DataFrame([(x, k) for k, v in dfs.items() for x in v['name']],
columns=['name','city'])
df['city'] = df['city'].str.replace('^[0-9\.]+', '')
print (df)
name city
0 James DC
1 Bond DC
2 Steven DC
3 Walker SH
4 Tom SH
5 Filler GZ
6 Cooker GZ
7 Tim GZ
或者如果需要所有列在这里省略 [name]
:
dfs = pd.read_excel('test.xlsx', sheet_name=None)
print(dfs)
df = (pd.concat(dfs)
.reset_index(level=1, drop=True)
.rename_axis('city')['name']
.reset_index())
df['city'] = df['city'].str.replace('^[0-9\.]+', '')
print (df)
city name
0 DC James
1 DC Bond
2 DC Steven
3 SH Walker
4 SH Tom
5 GZ Filler
6 GZ Cooker
7 GZ Tim
给定一个 excel 文件 test.xlsx,其中有许多 sheet:1.DC
、2.SH
和 3.GZ
等
import xlrd
dfs = xlrd.open_workbook('./test.xlsx', on_demand = True)
print(dfs.sheet_names())
输出:
['1.DC', '2.SH', '3.GZ']
我如何读取并连接所有 sheet 并创建一个包含 sheet 名称的新列,同时删除每个 sheet 名称开头部分的 1., 2., 3., etc.
?
预期的结果是这样的:
使用 read_excel
和 sheet_name=None
将所有工作表转换为 DataFrame
s:
dfs = pd.read_excel('test.xlsx', sheet_name=None)
dfs = {k: v.loc[:, ~v.columns.str.contains('Unnamed')] for k, v in dfs.items()}
# print(dfs)
然后如果需要一列,请使用 lsit comparehension 与 select 这一列,此处 name
df = pd.DataFrame([(x, k) for k, v in dfs.items() for x in v['name']],
columns=['name','city'])
df['city'] = df['city'].str.replace('^[0-9\.]+', '')
print (df)
name city
0 James DC
1 Bond DC
2 Steven DC
3 Walker SH
4 Tom SH
5 Filler GZ
6 Cooker GZ
7 Tim GZ
或者如果需要所有列在这里省略 [name]
:
dfs = pd.read_excel('test.xlsx', sheet_name=None)
print(dfs)
df = (pd.concat(dfs)
.reset_index(level=1, drop=True)
.rename_axis('city')['name']
.reset_index())
df['city'] = df['city'].str.replace('^[0-9\.]+', '')
print (df)
city name
0 DC James
1 DC Bond
2 DC Steven
3 SH Walker
4 SH Tom
5 GZ Filler
6 GZ Cooker
7 GZ Tim