python熊猫浮点数在转换为字符串时四舍五入

时间:2019-09-24 14:45:10

标签: python pandas csv scientific-notation

我有这个CSV文件

id,adset_id,source
1,,google
2,23843814084680281,facebook
3,,google
4,23843814088700279,facebook
5,23843704830370464,facebook

我的问题是,当我尝试使用panda读取它时,因为我无法通过模式panda来推断adset_id列的模式为float64(由于NaN值)

所以我写这个

import pandas as pd

df = pd.read_csv('/Users/test/Desktop/float.csv')
print(df)

我将获得adset_id的科学计数法 结果:

   id      adset_id    source
0   1           NaN    google
1   2  2.384381e+16  facebook
2   3           NaN    google
3   4  2.384381e+16  facebook
4   5  2.384370e+16  facebook

我找不到解决此问题的任何方法,因此我尝试进行破解,并将此数字转换为String。但是为此,我需要先将其转换为int64,然后再将其转换为字符串。

import pandas as pd
import numpy as np

df = pd.read_csv('/Users/test/Desktop/float.csv')

df = df.fillna({'adset_id':-1})
df['adset_id'] = df['adset_id'].astype('int64')
df['adset_id'] = df['adset_id'].astype('str')
df['adset_id'].replace('-1', np.NaN, inplace=True)

print(df)

结果是:

   id           adset_id    source
0   1                NaN    google
1   2  23843814084680280  facebook
2   3                NaN    google
3   4  23843814088700280  facebook
4   5  23843704830370464  facebook

如您所见,我的adset_id中有2个被舍入了:
23843814084680281-> 23843814084680280
23843814088700279-> 23843814088700280

我只想能够将此CSV格式读取到熊猫数据框,而不会用adset_id作为科学记号,那么任何解决方案将不胜感激

2 个答案:

答案 0 :(得分:1)

pd.read_csv之内。查看dtype参数。您可以设置dtypes字典以确保将其作为字符串读取。

df = pd.read_csv('PATH_TO_CSV.csv', dtype={'adset_id':str})

您还可以查看na_valueskeep_default_nana_filter参数来帮助处理NULL

答案 1 :(得分:0)

pandas中,以表示数据的方式发生了向科学计数法的“转换”。导入熊猫后,尝试添加以下代码。

import pandas as pd
pd.options.display.float_format = '{:.2f}'.format