我有一个csv
,它看起来像(headers =第一行):
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()
将它们视为浮点数,以及如何确保它们在读取时是整数?
5条答案
按热度按时间htzpubme1#
正如root在评论中提到的,这是Pandas(和Numpy)的限制。
NaN
是一个浮点数,CSV中的空值是NaN。这一点也被列在Pandas的陷阱中。
你可以用几种方法来解决这个问题。
对于下面的示例,我使用以下方法导入数据-请注意,我在列
a
和b
中添加了一行空值删除NaN行
第一个选项是删除包含此
NaN
值的行。这样做的缺点是,您会丢失整行。将数据放入dataframe后,运行以下命令:这将删除 Dataframe 中的所有
NaN
行,然后将列a
和列b
转换为int
。填充占位符数据
NaN
此选项将用丢弃值替换所有
NaN
值。这个值是你需要确定的。对于这个测试,我将其设置为-999999
。这将允许使用保留其余的数据,将其转换为int,并使其明显的数据是无效的。如果稍后要根据列进行计算,则可以过滤掉这些行。这会产生一个类似这样的dataframe:
保留float值
最后,另一种选择是保留float值(和
NaN
),而不用担心非整数数据类型。tzcvj98z2#
我知道这是一个老问题,但在目前的答案中有缺失的选项。
你可以指定列的类型,在例子中应该是这样的:
pandas将缺失值设置为
<NA>
6rvt4ljy3#
使用Pandas read_csv将浮点数转换为整数值-工作==========================================================================================================================================================================================================================================
ddhy6vgd4#
我在一些Django代码中使用了这个方法来将格式化的 Dataframe 渲染成HTML。
我没有列类型或列数的先验知识。
任何一列都有很大可能是
NaN
。我想在真正的浮点数上设置精度,并保持整数值不变。
将
NaN
设置为永远不会使用的整数值(假设)使用
convert_dtypes()
再次推断类型,而不使用NaN
将虚拟值转换回
NaN
(或仅使用PythonNone
)现在,由于缺少值而被推断为浮点数的整数列被正确地标识为整数。
假设数据集中不会有任何合法的值-999999,这种用法是安全的假设。
请注意,
convert_dtypes()
将float64
更改为Float64
,并将int64
更改为Int64
,这是以后应用样式等时需要记住的:6qftjkof5#
我使用pandas 1.5.3,下面的代码保持整数值,尽管列中有NaN值。