我有名为“ name1 01.01.2018.xlsx”,“ name1 01.01.2018.xlsx”,“ name2 12.23.2019.xlsx”之类的excel文件,依此类推。我想加入所有匹配日期(最后10个字符)的文件。
我可以通过以下方式加入所有参与者:
import glob
import os
import pandas
os.chdir('filepath')
files = [pd.read_excel(p, skipfooter=1) for p in glob.glob("*.xlsx")]
df = files[0].drop(files[0].tail(0).index).append([files[i].drop(files[i].tail(0).index) for i in range(1,len(files))])
仅当最后一个字符匹配时,如何才能加入?我没有最后10个字符的选项列表,我希望它自动更新。
答案 0 :(得分:1)
首先,我们需要重新格式化您的代码。虽然加入数据框的行是正确的,但它很难阅读并且可以更高效地完成:
import glob
import os
import pandas as pd
os.chdir('filepath')
files = [pd.read_excel(p, skipfooter=1) for p in glob.glob("*.xlsx")]
# drop the tail of all files
files = [f.drop(f.tail(0).index) for f in files]
# join all files
df = files[0].append(files[1:])
然后,我们需要对其进行一些更新,以便您可以检查已加载文件的文件名,并可以通过某种方式将它们重新绑定到创建的数据框。
import glob
import os
import pandas as pd
os.chdir('filepath')
# store last 10 characters of original filename
files = [(p[-10:], pd.read_excel(p, skipfooter=1)) for p in glob.glob("*.xlsx")]
# drop the tail of all files
files = [(p, f.drop(f.tail(0).index)) for p, f in files]
# group files by last 10 characters of filename
files = {p: [g for n, g in files if n == p] for p in set(p for p, f in files)}
# join all files with same last 10 characters
for key, value in files.items():
files[key] = value[0].append(value[1:])