首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尽管显式声明为dtype=object,pd.to_csv仍将int/str混合内容导出为浮点型

尽管显式声明为dtype=object,pd.to_csv仍将int/str混合内容导出为浮点型
EN

Stack Overflow用户
提问于 2020-11-10 22:30:22
回答 1查看 23关注 0票数 0

在下面的示例中,goodbad被创建为具有相同的内容,但只有一个以我想要的方式导出到CSV:

代码语言:javascript
运行
复制
>>> import pandas as pd
>>> good = pd.Series({'a': 1, 'b': 2, 'c': ''})
>>> good
a    1
b    2
c
dtype: object
>>> good.to_csv()
',0\na,1\nb,2\nc,\n'  # ok

>>> bad = pd.Series({'a': 1, 'b': 2, 'c': float('nan')}).fillna('')
>>> bad
a    1
b    2
c
dtype: object
>>> bad.to_csv()
',0\na,1.0\nb,2.0\nc,\n'  # ???

我知道熊猫does not support mixed int/nan Series and thus auto-promotes them to float,但是这里的两个系列都声称已经有了dtype对象!

这里特别令人沮丧的是,打印的数据与导出的数据有很大的不同,pandas.DataFrame.to_string函数(由print调用)涉及数据类型,而pandas.DataFrame.to_csv函数不涉及数据类型。

同样的事情的另一个例子:

代码语言:javascript
运行
复制
>>> row1 = pd.Series({'a': 1, 'b': 2}, dtype=object)
>>> row2 = pd.Series({'b': 2, 'c': 3}, dtype=object)
>>> pd.DataFrame([row1, row2], dtype=object).fillna('').to_csv()
',a,b,c\n0,1,2,\n1,,2,3\n'  # ok

>>> row1['a'] = 42
>>> pd.DataFrame([row1, row2], dtype=object).fillna('').to_csv()
',a,b,c\n0,1,42,\n1,,2,3\n'  # ok

>>> row1['b'] = 42
>>> pd.DataFrame([row1, row2], dtype=object).fillna('').to_csv()
',a,b,c\n0,42,42,\n1,,2,3\n'  # ok

>>> row1[['a', 'b']] = [42, 42]
>>> pd.DataFrame([row1, row2], dtype=object).fillna('').to_csv()
',a,b,c\n0,42.0,42.0,\n1,,2.0,3\n'  # ???

有没有理由让row1[['a', 'b']] = [42, 42]的行为与row1['a'] = 42; row1['b'] = 42不同呢?一般情况下,如何避免意外的浮点转换?

使用的版本: Python 3.7、pandas 1.1.3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-10 23:48:34

这并没有真正解决“为什么”的部分,但我找到了针对我的特定情况的变通方法。我认为尝试避免“破坏”DataFrame是一项徒劳的任务,所以我只是在导出之前修补我的DataFrame:

代码语言:javascript
运行
复制
df_fixed = df.applymap(lambda cell: int(cell) if str(cell).endswith('.0') else cell)
代码语言:javascript
运行
复制
>>> df.to_csv()
',a,b,c\n0,42.0,42.0,\n1,,2.0,3\n'

>>> df_fixed.to_csv()
',a,b,c\n0,42,42,\n1,,2,3\n'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64770882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档