首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中连接所有工作表文件并使用工作表名称创建一个新列

问在Python中连接所有工作表文件并使用工作表名称创建一个新列
EN

Stack Overflow用户
提问于 2020-10-20 18:38:30
回答 1查看 242关注 0票数 1

给定一个包含多张工作表的excel文件test.xlsx:1.DC、2.SH和3.GZ等。

代码语言:javascript
复制
import xlrd
dfs = xlrd.open_workbook('./test.xlsx', on_demand = True)
print(dfs.sheet_names()) 

输出:

代码语言:javascript
复制
['1.DC', '2.SH', '3.GZ']

如何读取和连接所有工作表,并使用工作表名称创建新列,同时删除每个工作表名称开始部分中的1., 2., 3., etc.?

预期的结果如下所示:

​

​

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-20 18:49:19

使用带有sheet_name=None的read_excel将所有工作表转换为DataFrame:

代码语言:javascript
复制
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) 

然后,如果需要一列,请使用列表比较和select此列,此处为name

代码语言:javascript
复制
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]:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64443422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档