我的DataFrame有大约20列,混合列类型;其中一个是15到18位的身份证号码。某些行没有ID号(列中有NaN)。在阅读.csv时,身份证号码是用科学记数法写的,但却失去了身份证号码的好处......
我正在尝试找到一种方法将DataFrame保存为csv(使用.to_csv),同时将此ID号保存为完整的int形式。
我发现最接近的是Format / Suppress Scientific Notation from Python Pandas Aggregation Results,但它会更改所有列,我只想更改一列。
感谢您的帮助!
答案 0 :(得分:0)
您可以在致电float_format
to_csv()
df.to_csv(filepath, index=False, sep='\t', float_format='%.6f')
在此完整答案:convert scientific notation to decimal pandas python
在您使用ID的情况下,您可以尝试将6更改为0
答案 1 :(得分:0)
正如MaxU在评论中所说,最好的方法是使用NaN的占位符。
我在列上使用.fillna(-9999)
删除了NaN,然后很容易将ID表示为int(使用.astype(int)
或dtype
)。
问题解决了。
答案 2 :(得分:0)
从熊猫0.24(2019年1月)开始,您可以将数据表示为arrays.IntegerArray
,对应于nullable integers,从而在坚持惯用熊猫的同时实现所需的功能。
例如,假设以下是使用浮点数的结果:
In [99]: df.Id
Out[99]:
0 1.000000e+18
1 2.000000e+18
2 3.000000e+18
3 NaN
4 4.000000e+18
Name: Id, dtype: float64
In [100]: df.Id.to_csv('output.csv')
In [101]: !cat output.csv
0,1e+18
1,2e+18
2,3e+18
3,
4,4e+18
然后,使用dtype 'Int64'
,您将获得以下内容:
In [102]: df.Id.astype('Int64')
Out[102]:
0 1000000000000000000
1 2000000000000000000
2 3000000000000000000
3 NaN
4 4000000000000000000
Name: Id, dtype: Int64
In [103]: df.Id.astype('Int64').to_csv('output.csv')
In [104]: !cat output.csv
0,1000000000000000000
1,2000000000000000000
2,3000000000000000000
3,
4,4000000000000000000