python - pandas to_csv 将丢失 NaN 和 None 之间的信息
问题描述
我想将熊猫数据框转换为 CSV。如果我只使用to_csv
,我会得到:
>>> import pandas as pd
>>> df = pd.DataFrame.from_dict({"a": [1,2,3], 2: [2,3,float("NaN")], 3: ["a", None, "b"]})
>>> df
a 2 3
0 1 2.0 a
1 2 3.0 None
2 3 NaN b
>>> df.to_csv(index=False)
'a,2,3\n1,2.0,a\n2,3.0,\n3,,b\n'
我需要 CSV 有NaN
's 所以我最初做了以下事情:
>>> df.to_csv(index=False, na_rep="NaN")
'a,2,3\n1,2.0,a\n2,3.0,NaN\n3,NaN,b\n'
但后来我意识到在生成的 CSV中也将 's 映射None
到's。NaN
我想以不同的方式对待 NaN 和 Nones,但似乎na_rep
在这两种类型之间丢失了信息。
这个上下文并不是真正需要的,但无论如何我都会给出它:我正在尝试将数据帧批量插入到 postgres 中,使用COPY FROM
它需要 CSV。Postgres 抱怨 CSV 中缺少的字段不是有效的数字类型,这意味着我需要正确映射 NaN。
psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type double precision: """"
解决方案
如果需要转换None
为空字符串,这个技巧是可能的 - 将值转换为字符串并按None
s 比较:
df = df.mask(df.astype(str).eq('None') & df.isna(), '')
print (df.to_csv(index=False, na_rep="NaN"))
a,2,3
1,2.0,a
2,3.0,
3,NaN,b
推荐阅读
- python - Python枚举函数自动排序
- android - 扩展功能无法从库中导入
- mysql - 不适用于更新语句的情况
- verilog - 范围规范 Verilog
- c# - 从 Controller .Net Core 返回下载文件
- c++ - 这个函数在c++中执行了多少次
- php - 如何将 PrestaShop 升级到未发布的官方版本,如(1.7.8 或 1.7.7)?
- google-drive-api - 如何将谷歌驱动器菜单栏和/或谷歌幻灯片从英语更改为西班牙语
- flask - 无法在 Flask Socket IO 中访问应用程序上下文
- python - RuntimeError:字典改变了大小