Python 默认情况下,pd.read\u csv将整数视为浮点数

Python 默认情况下,pd.read\u csv将整数视为浮点数,python,csv,pandas,integer,Python,Csv,Pandas,Integer,我有一个csv,看起来像(标题=第一行): 当我跑步时: df = pd.read_csv('file.csv') 列a和b的末尾有一个.0,如下所示: df.head() name,a,a1,b,b1 arnold,300311.0,arnld01,300311.0,arnld01 sam,300713.0,sam01,300713.0,sam01 列a和b是整数或空白,那么为什么pd.read\u csv()将它们视为浮点数,如何确保它们在读取时是整数 如评论中所述,这是对熊猫(和Nu

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

当我跑步时:

df = pd.read_csv('file.csv')
a
b
的末尾有一个
.0
,如下所示:

df.head()

name,a,a1,b,b1
arnold,300311.0,arnld01,300311.0,arnld01
sam,300713.0,sam01,300713.0,sam01
a
b
是整数或空白,那么为什么
pd.read\u csv()
将它们视为浮点数,如何确保它们在读取时是整数

如评论中所述,这是对熊猫(和Numpy)的限制
NaN
是一个浮点数,CSV中的空值是NaN

这也被列在《大熊猫名录》中

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

对于下面的示例,我使用以下方法导入数据-注意,我在列
a
b

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
。这将允许use保留其余数据,将其转换为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将浮点值转换为整数值-工作====================================================

#导入数据集
dataset=pd.read\u csv('WorldWarWeather\u Data.csv')
X=dataset.iloc[:,3:11]。值
y=dataset.iloc[:,2]。值
X=X.aType(int)

y=y.astype(int)
您使用的是什么版本的python和pandas?我无法使用Pandas
0.18.1
在Python 3.5.1或Python 2.7.10中复制这一点,您所说的“空白”是什么意思?你的意思是
NaN
值吗?如果是这样,该列将需要float数据类型,因为
NaN
是一个浮点,而不是一个整数。您可能会有选择地将非NaN值转换为整数,但我认为这是不可取的。将它们作为整数而不是浮点数有什么好处?Python版本=3.5.1 | Anaconda 2.5.0(64位)和Pandas 0.18.1
>>> 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