我有csv
看起来像(header =第一行):
name,a,a1,b,b1
arnold,300311,arnld01,300311,arnld01
sam,300713,sam01,300713,sam01
当我跑步时:
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_csv()
将它们视为浮点数,如何确保它们在读取时是整数?
答案 0 :(得分:5)
作为评论中提到的root,这是Pandas(和Numpy)的限制。 NaN
是一个浮点数,您在CSV中的空值是NaN。
这也列在大熊猫的gotchas中。
您可以通过几种方式解决这个问题。
对于下面的示例,我使用以下内容导入数据 - 请注意,我在列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
。这将允许使用保留其余数据,将其转换为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
)而不用担心非整数数据类型。
答案 1 :(得分:0)
使用熊猫将float转换为整数值read_csv-工作==================================== ===============
# 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)