【问题标题】:Pandas DataFrame export to_csv change dtype of columnsPandas DataFrame 导出 to_csv 更改列的 dtype
【发布时间】:2018-10-14 09:39:43
【问题描述】:

希望是一个简单的请求。

我发现当我构建一个 DataFrame 并设置列数据类型然后将其导出到 csv 时,它正在将数字字符串的数据类型转换为整数。

例如一个值可能是“0000”,而 csv 最终的值为 0。但我需要它来保留字符串中的字符数并将 csv 保存为“0000”。

有人知道保留字符串而不是转换后的数据类型的方法吗?

在导入后设置数据类型并不能解决问题(在有人告诉我我可以在导入时/之后设置它之前),因为它会导致在将整数转换为字符串时,您还必须配置前导 0在每次导入时也是如此,这不是最佳的。

希望我忽略了一些简单的事情。

(编辑) 哦,我的导出行只是一个简单的导出,这就是为什么我可能只是没有意识到需要提供的参数。

df.to_csv("Test.csv", index=False)

【问题讨论】:

  • 导致问题的列的数据类型是什么? (必须是object。)
  • object 是为该列列出的当前数据类型,但它是一个转换为字符串的数值,以使其始终保持为 4 位数字,包括在使用数字时将其保持为 4 位所需的填充值是说 23 需要是 '0023',因为数字是一个身份
  • 等等,你怎么知道前导零被删除了?您是否在 Excel 中打开了 CSV 文件?
  • 你能在导出之前展示一个数据框的小样本吗?连同数据类型?
  • @DyZ 向我展示了我的假设的愚蠢性。谢谢你,DyZ。 ASGM 你确实解决了它,而我最初对导入 str 的角度很好。感谢大家向我展示了我错误的简单假设,在打开数据时没有考虑 Excel 转换数据,请先教我不要使用文本编辑器。

标签: python-3.x pandas


【解决方案1】:

假设df['your_column'] 是您要保留的列,您可以在read_csv() 中使用dtype 参数:

df.read_csv('temp.csv', dtype={'your_column': str})

如果这不起作用,您确定您的列包含开头的字符串吗?因为这是我看到的行为:

>>> df1 = pd.DataFrame({'a': ['0000', '0000', '0100',]})
>>> df1
      a
0  0000
1  0000
2  0100
>>> df1.to_csv('temp.csv', index=False)
>>> df2.read_csv('temp.csv', dtype={'a': str})
>>> df2
      a
0  0000
1  0000
2  0100

也许您的问题不在于导出或导入,而在于创建。

df = pd.DataFrame({'a': 0000, 0000, 0100]})

这将创建一个值为0,0,100 的数据框。如果您希望它们成为字符串,则需要将它们创建为字符串。

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多