【发布时间】:2020-06-18 03:20:38
【问题描述】:
我有一个类似于以下文件的 CSV 文件,我想在其中读取“boolean_column”作为带有 pandas 的可为空的布尔 dtype。
boolean_column, string_column
1.0, a
0.0, b
,c
当我使用pd.read_csv() 阅读它而不分配数据类型时,不会引发错误:
import io
import pandas as pd
example_csv = """
boolean_column, string_column
1.0, a
0.0, b
,c"""
csv = io.StringIO(example_csv)
df = pd.read_csv(csv)
df.info()
>>> <class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 boolean_column 2 non-null float64
1 string_column 3 non-null object
dtypes: float64(1), object(1)
memory usage: 176.0+ bytes
但是,我希望“boolean_column”具有可为空的布尔 dtype 而不是 float64。因此,我在读取数据时分配了一个dtype。
csv = io.StringIO(example_csv)
df = pd.read_csv(csv, dtype={"boolean_column": "boolean"})
>>> ValueError: 1.0 cannot be cast to bool
我认为立即分配正确的 dtype 而不是事后强制转换 float64 更为优雅。我没有得到什么?这应该可行,对吧?
至少是这样:
pd.Series([None, 1.0, 0.0]).astype("boolean")
>>> 0 <NA>
1 True
2 False
dtype: boolean
【问题讨论】: