【问题标题】:Default column names while writing pandas df as csv将 pandas df 写为 csv 时的默认列名
【发布时间】:2021-03-04 11:05:40
【问题描述】:

我正在尝试使用 to_csv 函数将 pandas df 编写为 csv 文件。写完后,我观察到 pandas 会自动创建如下所示的默认列名。

    _c0     _c1     _c2     _c3     _c4     _c5

0    A       B       C       D       E        F
1    a       b       c       d       e        f     
2    g       h       i       j       k        l

我的实际列名是 [A,B,C,D,E,F]。以下是我的写函数

df.to_csv(file_name,encoding='utf-8',header=True,index=False,columns=[A,B,C,D,E,F])

我的预期格式应该如下

     A       B       C       D       E        F 
0    a       b       c       d       e        f 
1    g       h       i       j       k        l

我可以在读取创建的 csv 后通过执行以下几行来获得预期的格式。

df.columns = df.iloc[0]
df = df.iloc[1:]

但是,有什么办法可以避免在创建 csv 之前创建这些默认列名?

提前致谢

【问题讨论】:

  • 在你使用df.to_csv()方法之前你的数据框是什么样子的?
  • 您不需要包含columns=...,除非您正在编写列的子集。
  • @AnuragDabas 在使用 df.to_csv() 之前数据框看起来像没有默认列名的预期格式

标签: python pandas export-to-csv


【解决方案1】:

我认为这适合你:

import pandas as pd
df = pd.DataFrame([{"A":"a", "B":"b", "C":"c", "D":"d", "E":"e", "F":"f"},
                    {"A":"g", "B":"h", "C":"i", "D":"j", "E":"k", "F":"l"}])
df.to_csv(file_path, index=True)

我认为您的问题是您使用的是columns 参数。

【讨论】:

  • 你好安吉洛。谢谢您的回答。这在我的情况下是不可行的,因为我正在动态创建数据框并且其中有数百行。
  • @Sooraj 没关系。您唯一需要的就是最后一行。我把其他行放在了一个可重现的例子中,而不是为了你的代码。
  • 明白。但事实证明,我的写入实际上很好,问题出在导入输出 csv 时。再次感谢!
【解决方案2】:

我认为“问题”与您何时导入数据框有关。您没有正确设置标题。我认为您在 df 中找不到所需的列名,不是吗?你是怎么导入这个的?

如果您从 csv 读取它并使用 pd.read_csv 确保 header=0

【讨论】:

  • 我实际上可以在 iloc[0] 中找到所需的列,实际的列名是 _c0,_c1,... 我尝试使用 pd.read_csv 和 header=False,仍然没有运气
  • header=False 意味着 pandas 会将默认列名放入您的数据框中,这不是您想要的。 Header =0 将使用 csv 的第一行来查找列名。你的 csv 是如何设置的?@Sooraj
  • 问题确实是在导入的时候。我正在使用 pyspark 导入此 csv,并且在读取 csv 时必须明确提及 header=True。非常感谢!
【解决方案3】:

您可以使用df.to_csv(header=...) 设置您的自定义标题。 如果您不需要,只需输入header = False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2021-06-14
    • 2019-08-12
    • 2018-05-31
    • 1970-01-01
    • 2019-12-18
    相关资源
    最近更新 更多