使用Python Pandas循环将不同的.csv文件读入不同的数据帧

时间:2018-08-22 19:07:01

标签: python pandas loops csv

请先将此问题标记为重复,然后阅读整篇文章。我知道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

2 个答案:

答案 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对其进行迭代。