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 -> 2384381408468028023843814088700279 -> 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_valueskeep_default_nana_filter 参数以帮助处理 NULL

【讨论】:

【参考方案2】:

pandas 以呈现数据的方式“转换”为科学计数法。尝试在导入 pandas 后立即添加以下代码。

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

【讨论】:

以上是关于python Panda浮点数在转换为字符串时被四舍五入的主要内容,如果未能解决你的问题,请参考以下文章

检查字符串是不是可以在 Python 中转换为浮点数

无法在python中将字符串转换为浮点数

Python:ValueError:无法将字符串转换为浮点数:'0'

Python“ValueError:无法将字符串转换为浮点数:%”

带有前缀的Python熊猫数据框字符串转换为浮点数

如何将小数字转换为python中的浮点数? [复制]