请先将此问题标记为重复,然后阅读整篇文章。我知道this帖子有一个类似的问题,但是我在寻找的内容有所不同。
我有一个文件名列表:
files = ['first.csv', 'second.csv', 'third.csv']
我想在与熊猫的循环中阅读它们。我期望为循环中的每次迭代创建一个不同的数据框:
first = pd.read_csv('first.csv')
second = pd.read_csv('second.csv')
third = pd.read_csv('third.csv')
但是在一个循环中。像这样:
for i in range(len(files)):
csv = re.split('.', files[i])[0]
csv = pd.read_csv(files[i])
重要:每个csv都有不同的行和列。因此,我要阅读的不是三个csv,将它们与pd.concat
合并为一个。我想分别阅读。
我试图通过以下方式将它们读入列表:
dataframe_list = [pd.read_csv(file_name) for file_name in files]
但这会引发下一个错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x85 in position 59: invalid start byte
答案 0 :(得分:0)
files = ['first.csv', 'second.csv', 'third.csv']
list_of_df=[]
for i in range(len(files)):
df = pd.read_csv(files[i],encoding = "utf-8")
list_of_df.append(df)
答案 1 :(得分:0)
您可以执行以下操作:
import pandas as pd
files = ['file1.csv', 'file2.csv', 'file3.csv']
dataframe_list = [pd.read_csv(file_name) for file_name in files]
然后您可以调用dataframe_list[0]
以获取第一个数据帧,依此类推。您可能想使用字典,而将键作为所需的数据框标签。
快速提示:构造for i in range(0, len(files))
然后仅关心files[i]
是丑陋的。 files
是一个列表,因此您可以使用for file in files
对其进行迭代。