【问题标题】:pandas adding .0 when I import from CSV当我从 CSV 导入时,熊猫添加 .0
【发布时间】:2022-01-20 09:48:14
【问题描述】:

我的问题是,当我导入基数时,pandas 会尝试将其转换为数字?

这或多或少是我的 csv 文件的样子。

Data,ID,Text

2018-06-11,20995, bla bla bla 

2018-06-11,17980, bla bla bla

2018-06-11,46854, bla bla bla

问题是当我使用 pd.read_csv 导入它时。 Id 列应该与 csv 文件中的完全相同。但是熊猫正在返回类似的东西:

Data,ID,Text

2018-06-11,20995.0, bla bla bla 

2018-06-11,17980.0, bla bla bla

2018-06-11,46854.0, bla bla bla

我在读取过程中尝试使用 dtype

df= pd.read_csv('df.csv',encoding ='latin1',dtype={'ID':str})

但它仍然添加了 .0。当我查看 csv 时,它没有这些拖尾 .0

我也尝试过转成字符串

df['ID'] = df['ID'].astype(str) 

我想澄清一下,我已经阅读了this question 并且回复没有回答我的问题

【问题讨论】:

  • ID 列中的缺失值强制 pandas 转换为 float。该列的名称是' ID',您缺少一个空格。 > 是否位于 CSV 文件的每一行的开头?
  • 是的,ID 中缺少值,这在我的情况下是可以的。列名是“ID”我只是为了清楚起见而放了空格。 '>' 也一样。我已经删除了这些,因为它们显然会导致清晰度降低。
  • 使用您的新示例数据,我无法重现您的结果(使用pandas 1.1.5)。您的代码将 ID 列读取为 string 而不更改它。

标签: python pandas csv


【解决方案1】:

您遇到了有史以来最严重的熊猫疣。但现在是 2022 年,终于支持整数的缺失值了!看一下这个。这是一个 csv 文件,其中整数列 a 有一个缺失值:

a,b
1,y
2,m
,c
3,a

如果你以默认方式阅读它,你会得到烦人的浮点转换:

pd.read_csv('test.csv'):

    a       b
--------------
0   1.0     y
1   2.0     m
2   NaN     c
3   3.0     a

但是,如果你告诉 pandas 你想要带有缺失值的新实验整数,你会得到好东西: pd.read_csv('test.csv', dtype={'a': 'Int64'}):

    a   b
---------
0   1   y
1   2   m
2 <NA>  c
3   3   a

【讨论】:

  • 虽然您的答案是正确的解决方案,但它并不能解释为什么 dtype={'ID': str} 不起作用。自 2020 年 1 月起,稳定版支持 nullable integer type
  • 我试过了,得到 'ValueError: Unable to parse string "NEW"'
  • 我还认为最后的冒号是错字?
  • 天啊,我的 ID 里竟然有“新”这个词。我是个白痴
  • @MichaelSzczesny 你是对的,dtype={'ID': str} 应该也可以工作,它在测试示例中对我有用。 @elcunyado,如果你有非整数值,再试一次dtype={'ID': str},它真的应该工作。
猜你喜欢
  • 1970-01-01
  • 2021-10-09
  • 2017-05-09
  • 2023-03-13
  • 2018-07-18
  • 2020-09-25
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多