【问题标题】:python Panda float number get rounded while converting to stringpython Panda浮点数在转换为字符串时被四舍五入
【发布时间】: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 作为科学记数法,任何解决方案都将不胜感激

【问题讨论】:

标签: python pandas csv scientific-notation


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多