【问题标题】:Add multiple csv files into one csv file got error with NaN using panda使用 panda 将多个 csv 文件添加到一个 csv 文件中出现 NaN 错误
【发布时间】:2019-02-18 03:38:54
【问题描述】:

这里我有三个具有相同标题的 csv 文件。我想将这三个 csv 文件合并为一个具有相同标题的 csv 文件。 这是我的三个 csv 文件。我想使用带有列名的熊猫 python 来编写它。我看到了很多解决方案,但它对我不起作用。谁能帮我解决这个问题?

csv 1

csv2

csv 3

输出如下:

在尝试了你们都建议我的代码之后,它给了我这个在某些列中没有值,没有标题名称。

在尝试了您的代码 (@Benji) 后,它给了我一个带有 NaN 值的输出:

错误:

修改代码后的数据框

【问题讨论】:

  • 您能指定输出的样子吗?按时间顺序合并?还是只是合并?
  • @benji 我上传了输出的图像。可以看到csv 1,csv2,csv3文件数据一起进来
  • 您能告诉我们您是如何阅读.csv 文件的吗?
  • @benji 我试过你的代码,但它给出的输出带有 NaN 值。
  • 我使用 panda 读取了我的 csv 文件。 (data1 = pd.read_csv('temp1.csv') data2 = pd.read_csv('temp2.​​csv') data3 = pd.read_csv('temp3.csv')

标签: python pandas csv


【解决方案1】:

我认为“合并”是指联合。以下是如何做到这一点

import pandas as pd
pd.concat(
    [pd.read_csv(filename, dtype=str) for filename in ["f1.csv", "f2.csv", "f3.csv"]],
    axis=0,
).to_csv("union.csv")

【讨论】:

  • 当我尝试你的代码时,它给了我这个没有标题名称,在某些列中没有值。我粘贴了那个图像。你能看一下吗?
  • 尝试在dtype=str 之前添加header = 0 pd.read_csv 部分
【解决方案2】:
df1 = pd.read_csv('f1.csv')
df2 = pd.read_csv('f2.csv')
df3 = pd.read_csv('f3.csv')

frames = [df1, df2, df3]
result = pd.concat(frames)

【讨论】:

  • 当我尝试你的代码时,它给了我这个但没有错误(FutureWarning: Sorting because non-concatenation axis is notaligned. a future version of pandas will change to not sort by default. to accept the future行为,传递 'sort=True'。要保留当前行为并使警告静音,请传递 sort=False)你能解释一下吗?
【解决方案3】:

阅读.csv文件时可能有问题 试着这样读:

df1 = pd.read_csv('1.csv', header = 0, names=['date', 'time', 'x1', 'x2', 'x3'])
df2 = pd.read_csv('2.csv', header = 0, names=['date', 'time', 'x1', 'x2', 'x3'])
df3 = pd.read_csv('3.csv', header = 0, names=['date', 'time', 'x1', 'x2', 'x3'])    
df = pd.concat([df1, df2, df3], axis = 0)
df = df.sort_values('time').reset_index(drop = True)

【讨论】:

  • 是的,这是真的。我错误地阅读了我的 csv 文件。更改它并使用您的代码后,它给了我这个错误('
  • @awa 你能在阅读后打印出一个数据帧吗?我猜那个时间列可能同时包含 str 和 float 它应该只是 float。
  • 当然我粘贴了那个图像。你可以看看。
  • @awa 请上传您的 .csv 文件样本(不是全部数据,只是其中的样本)。我帮你会容易得多。
  • 我确实做到了,我把它贴在这里了。
【解决方案4】:

我遇到了这个确切的问题并像这样解决了它:

df = pd.concat([pd.read_csv(i) for i in csv_files])
df = df.reset_index(drop=True)

重要的一行是df.reset_index(drop=True。这就是连接列的内容。

【讨论】:

  • 我有一堆 csv 文件都遵循特定格式,所以我用这样的方式阅读它们:csv_files = ['data_america_2018_03_0' + str(i) for i in range(1,7)]
  • 好的,我试试。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 2017-06-07
  • 2022-01-04
  • 2020-08-09
  • 2014-02-12
  • 2014-02-26
相关资源
最近更新 更多