【发布时间】:2019-01-29 02:40:15
【问题描述】:
请在将此问题标记为重复之前阅读整篇文章。我知道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
【问题讨论】:
-
"Something like" 正是你所需要的(除了第二行,它没用)。你试过了吗?
-
@DYZ,他们不会简单地导致 csv 成为与
third.csv对应的数据帧吗?听起来他们想要三个不同的数据框。 -
创建新df后追加到new_list中
-
更高效的是,您可以使用
frames=[pd.read_csv(f) for f in files]甚至frames=list(map(pd.read_csv, files))获取数据帧列表。 -
@Rubén 错误是读取 csv 的问题,而不是将它们存储在列表中。如果所有文件都有不同的编码,您可以在字典中为每个文件指定编码,或者更随意地使用 try 和 except 子句。
except UnicodeDecodeError:然后尝试在pd.read_csv中使用添加的参数encoding='latin-1'读取坏文件