[英]Inconsistent pandas read_csv dtype inference on mostly-integer string column in huge TSV file
[英]Pandas read_csv inconsistent with data inference
所以我正在构建一个 function,它从 S3 存储桶中读取未知格式的 csv 数据。 如果我读取一列完全填充的数据,dataframe 会正确推断数据类型,但是如果列中的任何行为空,它总是将数据类型转换为字符串。 例如:
csv_1 = """id,name,age
0,dan,10
1,ana,
"""
csv_2 = """id,name,age
3,bill,33
4,jill,35
"""
df1 = pd.read_csv(io.StringIO(csv_1), index_col=None, keep_default_na=False)
df2 = pd.read_csv(io.StringIO(csv_2), index_col=None, keep_default_na=False)
df1['age'][0] # '10'
df2['age'][0] # 33
有没有办法改变这种行为,使给定列的数据类型默认为该列的 rest 是什么,在这种情况下是一个 integer? 我无法对特定列进行硬编码转换,因为在摄取之前我不知道列或数据类型,并且应该适用于任何 csv 结构。
您正在传递keep_default_na=False
,这意味着您将获得以下行为:
如果
keep_default_na
为 False,并且未指定na_values
,则不会将任何字符串解析为 NaN。
所以在这种情况下,该空值被解释为一个空字符串, ''
将不再被视为 NaN,因此,它将整个列视为一个字符串。
所以不要添加那个参数,保持默认的keep_default_na=True
:
In [12]: df1 = pd.read_csv(io.StringIO(csv_1), index_col=None)
In [13]: df1
Out[13]:
id name age
0 0 dan 10.0
1 1 ana NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.