默认情况下,将整数视为浮点数

2024-05-20 00:54:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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()为什么将它们视为浮点数,我如何确保它们在读取时是整数?


Tags: csvnamedfreadsama1整数跑步
2条回答

正如评论中提到的,这是熊猫(和小熊猫)的一个限制。NaN是一个浮点数,CSV中的空值是NaN。

这也列在熊猫的{a2}中。

你可以用几种方法来解决这个问题。

对于下面的示例,我使用以下命令导入数据-注意,我在列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值的行。这样做的缺点是,你失去了整排。将数据放入数据帧后,运行以下命令:

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),而不担心非整数数据类型。

使用Pandas将浮点转换为整数值read_csv-Working=

&13;
&13;
# Importing the dataset
dataset = pd.read_csv('WorldWarWeather_Data.csv')
X = dataset.iloc[:, 3:11].values
y = dataset.iloc[:, 2].values
X=X.astype(int)
y=y.astype(int)

相关问题 更多 >