繁体   English   中英

Pandas read_csv 与数据推断不一致

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM