python - 导入多个 Excel 文件,创建列并从 Excel 文件名称获取值

标签 python pandas

我需要上传多个 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 文件的数据

enter image description here

来自名为'20190115'的 Excel 文件的数据

enter image description here

最终数据框的“价格”列中的值必须不等于“0”,并且代码列中的值 - 代码=“r”(我不知道是否可以导出已过滤的数据,避免导出大量数据?)然后我需要添加“来自”列,其中包含来自文件名的相应日期:

像这样:

enter image description here

试用数据框:

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/

相关文章:

python - 无法使用 selenium 单击父级

Python/BeautifulSoup - 提取 div 内容检查 h1 文本

python - Pandas 中的复杂 groupby

python - 使用日期时间索引插入和填充 pandas 数据框

python - Pandas 和 Numpy 中关于多线程的奇怪错误

python - 小时、日期、天数计算

用于升和毫升之间转换的Python单位模块不起作用

python - Pandas 根据两个数据框计算百分比

python - 将列组合在一起并相应地填充

python - 在 numpy 中强制非数字字符为 NA(将 csv 读取到 pandas 数据帧时)