我需要上传多个 Excel 文件 - 每个文件都有一个开始日期的名称。例如。 “20190114”。 然后我需要将它们附加到一个 DataFrame 中。 为此,我使用以下代码:
all_data = pd.DataFrame()
for f in glob.glob('C:\\path\\*.xlsx'):
df = pd.read_excel(f)
all_data = all_data.append(df,ignore_index=True)
其实我不需要所有数据,而是通过多列进行过滤。 然后,我想为每个相应文件创建一个附加列(“来自”),其中包含文件名值(“日期”)。
示例:
来自名为'20190101'的 Excel 文件的数据
来自名为'20190115'的 Excel 文件的数据
最终数据框的“价格”列中的值必须不等于“0”,并且代码列中的值 - 代码=“r”(我不知道是否可以导出已过滤的数据,避免导出大量数据?)然后我需要添加“来自”列,其中包含来自文件名的相应日期:
像这样:
试用数据框:
import pandas as pd
df1 = pd.DataFrame({'id':['id_1', 'id_2','id_3', 'id_4','id_5'],
'price':[0,12.5,17.5,24.5,7.5],
'code':['r','r','r','c','r'] })
df2 = pd.DataFrame({'id':['id_1', 'id_2','id_3', 'id_4','id_5'],
'price':[7.5,24.5,0,149.5,7.5],
'code':['r','r','r','c','r'] })
最佳答案
IIUC,您可以过滤必要的行,然后连接,文件名可以使用 os.path.split()
并通过字符串切片访问文件名:
l=[]
for f in glob.glob('C:\\path\\*.xlsx'):
df=pd.read_excel(f)
df['from']=os.path.split(f)[1][:-5]
l.append(df[(df['code'].eq('r')&df['price'].ne(0))])
pd.concat(l,ignore_index=True)
<小时/>
id price code from
0 id_2 12.5 r 20190101
1 id_3 17.5 r 20190101
2 id_5 7.5 r 20190101
3 id_1 7.5 r 20190115
4 id_2 24.5 r 20190115
5 id_5 7.5 r 20190115
关于python - 导入多个 Excel 文件,创建列并从 Excel 文件名称获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58543280/