gpt4 book ai didi

python - pd.read_csv 默认情况下将整数视为 float

转载 作者:太空狗 更新时间:2023-10-29 18:07:02 26 4
gpt4 key购买 nike

我有一个 csv 看起来像(标题 = 第一行):

name,a,a1,b,b1
arnold,300311,arnld01,300311,arnld01
sam,300713,sam01,300713,sam01

当我运行时:

df = pd.read_csv('file.csv')

ab 列的末尾附加了一个 .0,如下所示:

df.head()

name,a,a1,b,b1
arnold,300311.0,arnld01,300311.0,arnld01
sam,300713.0,sam01,300713.0,sam01

ab 是整数或空白,那么为什么 pd.read_csv() 将它们视为 float ,我如何确保它们读取的是整数吗?

最佳答案

作为root评论中提到,这是 Pandas(和 Numpy)的限制。 NaN 是一个 float ,您在 CSV 中的空值为 NaN。

这在 gotchas 中列出 Pandas 也是如此。

您可以通过几种方式解决这个问题。

对于下面的示例,我使用以下内容导入数据 - 请注意,我在 ab 列中添加了一个空值行

import pandas as pd
from StringIO import StringIO

data = """name,a,a1,b,b1
arnold,300311,arnld01,300311,arnld01
sam,300713,sam01,300713,sam01
test,,test01,,test01"""

df = pd.read_csv(StringIO(data), sep=",")

删除 NaN 行

您的第一个选择是删除包含此 NaN 值的行。这样做的缺点是您会丢失整行。将数据放入数据框后,运行此命令:

df.dropna(inplace=True)
df.a = df.a.astype(int)
df.b = df.b.astype(int)

这会从数据框中删除所有 NaN 行,然后将 a 列和 b 列转换为 int

>>> df.dtypes
name object
a int32
a1 object
b int32
b1 object
dtype: object

>>> df
name a a1 b b1
0 arnold 300311 arnld01 300311 arnld01
1 sam 300713 sam01 300713 sam01

用占位符数据填充NaN

此选项会将所有 NaN 值替换为丢弃值。该值是您需要确定的。对于这个测试,我把它设为 -999999。这将允许使用保留其余数据,将其转换为 int,并明确哪些数据无效。如果您稍后根据列进行计算,您将能够过滤掉这些行。

df.fillna(-999999, inplace=True)
df.a = df.a.astype(int)
df.b = df.b.astype(int)

这会产生一个像这样的数据框:

>>> df.dtypes
name object
a int32
a1 object
b int32
b1 object
dtype: object

>>> df
name a a1 b b1
0 arnold 300311 arnld01 300311 arnld01
1 sam 300713 sam01 300713 sam01
2 test -999999 test01 -999999 test01

保留浮点值

最后,另一种选择是保留浮点值(和 NaN)而不用担心非整数数据类型。

关于python - pd.read_csv 默认情况下将整数视为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39666308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com