【问题标题】:Read different .csv files into different dataframes with a loop with Python Pandas [duplicate]使用 Python Pandas 循环将不同的 .csv 文件读入不同的数据帧 [重复]
【发布时间】: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' 读取坏文件

标签: python pandas loops csv


【解决方案1】:
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)

【讨论】:

  • 我试过但得到这个错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x85 in position 59: invalid start byte
  • 你需要传递编码参数。
【解决方案2】:

你可以这样做:

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

【讨论】:

  • 感谢您的提示!我尝试了您的解决方案,但它引发了此错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x85 in position 59: invalid start byte
猜你喜欢
  • 2019-08-03
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2021-12-16
相关资源
最近更新 更多