【发布时间】:2021-09-21 15:08:13
【问题描述】:
我在 S3 上有一个 JSON 文件,其中包含以下数据:
{"id": "1", "col1": null, "col2": "Test1", "col3": true}
{"id": "2", "col1": "abc", "col2": "Test2", "col3": null}
{"id": "3", "col1": "def", "col2": "Test3", "col3": true}
注意,col3 中有布尔值,但其中一行有一个空值。这是我的代码:
import pandas as pd
source_path = 's3://bucket/prefix/file.json'
df = pd.read_json(source_path, lines=True)
df.dtypes
输出:
id int64
col1 object
col2 object
col3 float64
dtype: object
df:
id col1 col2 col3
0 1 None Test1 1.0
1 2 abc Test2 NaN
2 3 def Test3 1.0
为什么 col3 被输入为浮点数?
Col1 有一个空值,但似乎正确地键入为一个对象(字符串)。是否有一种通用的方式(不明确地将“col3”转换为布尔值)来获取数据帧上的布尔类型?
【问题讨论】:
-
布尔值只有真/假
-
在你的情况下,熊猫列中只有一种类型是浮点数,因为 NaN 是浮点数
-
它需要转换为可以为空的 dtype,因此是 float64。在最近的版本中,您可以转换为 nullabe 整数类型,例如“Int64”。
-
@jarretg - 你认为
null是false吗?如果答案是肯定的 - 下面的答案可能对您有用。 -
@balderman - 这是来自第 3 方的数据,所以我真的不能说。我想我有 2 个问题,“为什么这是浮点类型”,这似乎是因为 Pandas 不允许可以为空的布尔值,所以 null 强制它是浮点数。第二个问题,“有没有一种通用的方法让 Pandas 将该列中的空值作为布尔值读取”,我认为你的回答意味着这是不可能的。我正在寻找一种解决方案,我 不必 必须直接提供列名。