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

使用Python循环将不同的.csv文件读入不同的数据帧,python,pandas,loops,csv,Python,Pandas,Loops,Csv,请在将此问题标记为重复问题之前阅读整篇文章。我知道那个帖子有一个类似的问题,但我要找的是不同的 我有一个文件名列表: 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') 但

请在将此问题标记为重复问题之前阅读整篇文章。我知道那个帖子有一个类似的问题,但我要找的是不同的

我有一个文件名列表:

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

您可以这样做:

import pandas as pd
files = ['file1.csv', 'file2.csv', 'file3.csv']
dataframe_list = [pd.read_csv(file_name) for file_name in files]
然后可以调用
dataframe\u list[0]
获取第一个数据帧,依此类推。您可能希望使用字典,而键是所需的数据帧标签



快速提示:在范围(0,len(files))中为i构造
,然后只关心
文件[i]
是丑陋的
files
是一个列表,因此您可以使用
for file in files
对其进行迭代

“Something like”正是您所需要的(第二行除外,它是无用的)。你试过了吗?@DYZ,他们所做的不就是让csv成为对应于
third.csv
的数据帧吗?听起来他们想要三个不同的数据帧。添加到新的数据帧列表创建一个新的数据帧后,您可以更有效地获得一个数据帧列表,其中包含
frames=[pd.read\u csv(f)for f in files]
甚至
frames=list(map(pd.read\u csv,files))
@Rubén读取csv时出现错误,而不是将其存储在列表中。如果所有文件都有不同的编码,您可以在字典中为每个文件指定编码,或者更随意地使用try-and-except子句
UnicodeDecodeError除外:
然后尝试在
pd中使用添加的参数
encoding='latin-1'
读取错误文件。read_csv
感谢您的提示!我尝试了您的解决方案,但它引发了以下错误:UnicodeDecodeError:“utf-8”编解码器无法解码位置59中的字节0x85:无效的起始字节tei尝试了但得到了以下错误:UnicodeDecodeError:“utf-8”编解码器无法解码位置59中的字节0x85:无效的起始字节您需要传递编码参数。
import pandas as pd
files = ['file1.csv', 'file2.csv', 'file3.csv']
dataframe_list = [pd.read_csv(file_name) for file_name in files]