python Panda浮点数在转换为字符串时被四舍五入
Posted
技术标签:
【中文标题】python Panda浮点数在转换为字符串时被四舍五入【英文标题】:python Panda float number get rounded while converting to string 【发布时间】:2019-09-24 14:45:10 【问题描述】:我有这个 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
我找不到任何解决此问题的方法,因此我尝试进行破解并将此数字转换为字符串。但为了做到这一点,我需要先将其转换为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 读取到 panda 数据框并且不要将 adset_id
作为科学记数法,任何解决方案都将不胜感激
【问题讨论】:
使用pd.read_csv('/Users/test/Desktop/float.csv', dtype='adset_id': object)
Import pandas dataframe column as string not int的可能重复
【参考方案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
【讨论】:
【参考方案2】:pandas
以呈现数据的方式“转换”为科学计数法。尝试在导入 pandas 后立即添加以下代码。
import pandas as pd
pd.options.display.float_format = ':.2f'.format
【讨论】:
以上是关于python Panda浮点数在转换为字符串时被四舍五入的主要内容,如果未能解决你的问题,请参考以下文章
Python:ValueError:无法将字符串转换为浮点数:'0'