我有一个文件,每个季度的数据保存在与该季度对应的不同文件夹中。换句话说,四分之一1文件夹,四分之一2,三分之一,四分之一。这是文件路径的唯一区别。我希望读取其中的所有四个文件并将它们连接到一个数据库中。我可以使用下面的简化代码版本手动进行此操作,并每次更改周期。
period = ‘Q1’
filepath = ‘filepath/’ + period
file = filepath + ‘/file.xls’
df = pd.read_excel(file)
我想使用某种形式的for循环将其自动化(我假设)。循环遍历这四个时间段,将文件读入数据库,然后进行串联。我已阅读有关如何使用同一文件夹中的文件来完成此操作的其他答案。但是我正努力在文件路径更改的地方这样做。手动将文件放入同一文件夹不是理想的解决方案。
我尝试将期间作为一个元组和一个包含所有4个期间的列表,然后进行简单的for循环,但这没有用。我收到以下错误消息。
TypeError: Can't convert 'list' object to str implicitly
非常感谢任何建议。
答案 0 :(得分:1)
您如何首先使用列表理解来获取所有文件的列表:
periods= ["Q1", "Q2", "Q3", "Q4"]
files = ["filepath/"+ p + "/file.xls" for p in periods]
然后使用
将它们全部加载到数据帧列表中dfs = []
for f in files:
df = pd.read_excel(f)
dfs.append(df)
答案 1 :(得分:1)
您可以使用这些循环创建完整的文件路径,并对其进行迭代以创建一个包含所有文件的DataFrame。
filepath = 'path/'
file = 'file.xlsx'
periods=['Q1','Q2','Q3','Q4']
files = []
for p in periods:
files.append(filepath+p+'/'+file)
files
data = []
for f in files:
data.append(pd.read_excel(f))
df = pd.concat(data)
答案 2 :(得分:0)
您可能想要这样的东西:
periods = ['Q1', 'Q2', 'Q3', 'Q4']
df = None
for period in periods:
filepath = 'filepath/' + period
file = filepath + '/file.xls'
if df is None:
df = pd.read_excel(file)
else:
df.append(pd.read_excel(file))
答案 3 :(得分:0)
您可以尝试这样的事情:
complete_df = pd.DataFrame()
for i in range(1,5):
quarter = 'Q'+str(i)
filepath = 'filepath/' + quarter
file = filepath + '/file.xls'
df = pd.read_excel(file)
complete_df = complete_df.append(df)