Pandas DataFrame导出至csv时如何更改列的数据类型

5
希望这个请求很简单。
我发现当我构建一个DataFrame并设置列数据类型,然后将其导出到csv时,它会对数字字符串的数据类型进行转换为整数。
例如,一个值可能是"0000",而csv最终变成了值0。但我需要它保留字符串中的字符数,并将csv保存为"0000"。
有人知道如何保留字符串而不是转换数据类型吗?
在导入之后设置数据类型无法解决问题(在任何人告诉我可以在导入之前/之后设置之前),因为它会导致将整数转换为字符串时必须每次导入都配置前导0s,这不是最理想的。
希望我正在忽略一些简单的东西。
(编辑) 哦,我的导出行只是一个简单的导出,这就是为什么我可能没有意识到需要提供的参数。
df.to_csv("Test.csv", index=False)

引起问题的列的数据类型是什么?(必须是“object”。) - DYZ
等等,你怎么知道前导零已经被移除了?你在Excel中打开CSV文件了吗? - DYZ
你能展示一下导出前的Dataframe小样本吗?包括数据类型? - ASGM
1
@DyZ 向我展示了我的假设的愚蠢。感谢你,DyZ。ASGM 你解决了它,我最初在导入时进行 str 的角度工作正常。感谢大家向我展示我错误的简单假设,没有考虑到 Excel 在打开数据时会进行转换,教训我不要首先使用文本编辑器。 - Aklys
@DyZ 再次感谢你让我意识到要对我的假设进行双重检查,以尽可能原始的信息为依据:) 我会因为忽视这一点而自责好几天哈哈 - Aklys
显示剩余3条评论
1个回答

5

假设您要保留的列为 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的数据框。如果你想让它们成为字符串,你需要将它们创建为字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接