【问题标题】:Pandas reads integer column in scientific notationPandas 以科学计数法读取整数列
【发布时间】:2019-08-27 06:46:45
【问题描述】:

由于某种原因,当我用pd.read_csv 导入我的csv 文件时,我的整数列之一(关注者数量)以科学计数法读取,即使我的值是整数并且显然不是科学计数法。

请看下面我打电话给df["num_followers"].describe()时看到的内容

我在这里查看了“抑制科学记数法”的所有答案,但没有找到任何可行的解决方案。

df['num_followers'].apply(lambda x: '{:.2f}'.format(x)) 只是将我的值转换为str。我尝试转换为 astype("float") 没有成功,值仍然是科学记数法,这弄乱了我的计算。有什么想法可以将其更改为int

count    1.200000e+02
mean     4.959472e+04
std      3.816126e+05
min      0.000000e+00
25%      6.725000e+01
50%      2.165000e+02
75%      5.932500e+02
max      4.021842e+06
Name: num_followers, dtype: float64

编辑

我尝试了以下答案之一,也没有成功:

IN: df_train = pd.read_csv("social_media_train.csv", index_col = [0])
df_train["num_followers"].describe()

OUT: count    5.760000e+02
mean     8.530724e+04
std      9.101485e+05
min      0.000000e+00
25%      3.900000e+01
50%      1.505000e+02
75%      7.160000e+02
max      1.533854e+07
Name: num_followers, dtype: float64

IN: df_train['num_followers'] = df_train['num_followers'].apply(np.int64)
df_train["num_followers"].describe()

OUT:count    5.760000e+02
mean     8.530724e+04
std      9.101485e+05
min      0.000000e+00
25%      3.900000e+01
50%      1.505000e+02
75%      7.160000e+02
max      1.533854e+07
Name: num_followers, dtype: float64

【问题讨论】:

标签: python pandas


【解决方案1】:

您可以将 np.int64 与 apply (https://docs.scipy.org/doc/numpy-1.10.1/user/basics.types.html) 一起使用。

import numpy as np

df['num_followers'] = df['num_followers'].apply(np.int64)

【讨论】:

  • 很遗憾,这不起作用。该列仍采用指数表示法
  • @MarielleDado 你确定吗?它可以在我的电脑上运行,我不明白为什么不适合你的情况。
  • 是的,我刚刚根据您的回答用我的结果更新了我的帖子
【解决方案2】:

pd.read_csv 中使用dtype= 选项,例如

df = pd.read_csv('filename.csv', dtype={'num_followers': np.int64})

您当然可以在 dict 中为其他列指定 dtypes。

【讨论】:

  • 我已经尝试过导入后转换数据类型,用astype(),会不会有什么不同?
  • 如果试图设置为整数的列碰巧有一个空白值,这将引发一个恼人的错误,例如"Integer column has NA values in column 1"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 2020-03-02
  • 1970-01-01
  • 2011-10-18
相关资源
最近更新 更多