【问题标题】:How to fix TypeError: cannot concatenate object of type '<class 'pandas.io.parsers.TextFileReader'>'; only Series and DataFrame objs are valid?如何修复 TypeError:无法连接类型为 '<class 'pandas.io.parsers.TextFileReader'>' 的对象;只有 Series 和 DataFrame obj 有效吗?
【发布时间】:2020-05-17 22:36:29
【问题描述】:

我正在尝试读取 csv 文件并将它们连接起来并将它们作为一个 csv 文件输出。我不断收到此错误:

TypeError: 无法连接类型为 '' 的对象;只有 Series 和 DataFrame obj 是有效的;

我不知道如何解决它。我是初学者,所以我会很感激任何帮助!谢谢!这是我写的代码:

csv.field_size_limit(sys.maxsize)
df1 = pd.read_csv('file1.csv', chunksize=20000)
df2 = pd.read_csv('file2.csv', chunksize=20000)
df3 = pd.read_csv('file3.csv', chunksize=20000)
df4 = pd.read_csv('file4.csv', chunksize=20000)
df5 = pd.read_csv('file5.csv', chunksize=20000)
df6 = pd.read_csv('file6.csv', chunksize=20000)

frames = [df1, df2, df3, df4, df5, df6]
result = pd.concat(frames, ignore_index=True, sort=False)
result.to_csv('new.csv')

【问题讨论】:

  • 所有这些df 的列数是否相同?
  • 您确定所有文件都有 20000 行吗?

标签: python pandas csv concatenation export-to-csv


【解决方案1】:

如果你调用 read_csv 传递 chunksize 参数,那么:

  • 它返回一个TextFileReader对象,
  • 可以使用,例如在一个循环中,读取和处理 连续的块。

如何使用“分块”读取 CSV 文件的示例:

reader = pd.read_csv('input.csv', chunksize=20000)
for chunk in reader:
    # Process the chunk (DataFrame)

或者你想:

  • 从每个源文件中仅读取最初的 20000 行
  • 将它们连接成一个新的 DataFrame?

如果是这种情况,则传递 nrows=20000(而不是 chunksize), 从每个文件中读取时。 然后所有返回的对象将只是 DataFrames,你将能够 concat 他们。

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 2021-12-11
    • 1970-01-01
    • 2022-01-21
    • 2020-11-05
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多