python-3.x - 为什么 pandas.to_csv 在尝试保留 NaN 时会丢弃数字?
问题描述
给定一个熊猫数据框
df = pd.DataFrame([(290122, 0.20, np.nan),
(1900, 1.20, "ABC")],
columns = ("number", "x", "class")
)
number x class
0 290122 0.2 NaN
1 1900 1.2 ABC
然后将其导出到 csv,我想保留 NaN,例如“NULL”或“NaN”,
df.to_csv("df.csv", encoding="utf-8", index=False, na_rep="NULL")
然而,打开 csv 我得到以下信息:也就是说,第一个单元格中的最后两位数字被删除。
number,x,class
2901,0.20,NULL
1900,1.20,ABC
如前所述,删除 na_rep 参数时,我按预期获得:
number,x,class
290122,0.20,
1900,1.20,ABC
解决方案
是的,这实际上是 pandas 1.0.0 中的一个错误。在 1.0.1 中修复。请参阅发行说明和https://github.com/pandas-dev/pandas/issues/25099。
根据您的数据,快速解决方法可能是:
import numpy as np
import pandas as pd
na_rep = 'NULL'
if pd.__version__ == '1.0.0':
na_rep_wrk = 8 * na_rep
data = [(290122, 0.20, 'NULL'), (2**40 - 1, 3.20, 'NULL'), (1900, 1.20, "ABC")]
df = pd.DataFrame(data, columns=("number", "x", "class"))
df.to_csv("df.csv", encoding="utf-8", index=False, na_rep=na_rep_wrk)
df2 = pd.read_csv('df.csv', keep_default_na=False)
assert(np.all(df == df2))
这给出了 csv 文件:
number,x,class
290122,0.2,NULL
109951162777,3.2,NULL
1900,1.2,ABC
推荐阅读
- duplicates - 邮递员重复收集/导出+重新导入
- django - 将数据填充到模型表单 Django 并在 URL Django 中传递 id 参数
- java - M2_HOME 将其路径设置为 bin
- corda - Corda 线性状态唯一性
- android - 为什么相对布局展开时framelayout内容消失
- python - 如何计算嵌套列表中两个项目的出现次数
- javascript - 验证字符串以匹配数字/浮点数
- agora.io - 加入()函数加载页面在移动设备上不起作用
- java - 如何在休眠中修复此查询?
- python-3.x - 如何使用加密模块转换 SSL 证书 PEM <--> PKCS#12/PFX 和 PEM <--> PKCS#7/P7B