我有这个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
作为科学记号,那么任何解决方案将不胜感激
答案 0 :(得分:1)
在pd.read_csv
之内。查看dtype
参数。您可以设置dtypes字典以确保将其作为字符串读取。
df = pd.read_csv('PATH_TO_CSV.csv', dtype={'adset_id':str})
您还可以查看na_values
,keep_default_na
和na_filter
参数来帮助处理NULL
答案 1 :(得分:0)
在pandas
中,以表示数据的方式发生了向科学计数法的“转换”。导入熊猫后,尝试添加以下代码。
import pandas as pd
pd.options.display.float_format = '{:.2f}'.format