У меня есть CSV-файл, похожий на следующий, в котором я хочу читать "boolean_column" как логический тип dtype, допускающий значение NULL, с pandas.
boolean_column, string_column
1.0, a
0.0, b
,c
Когда я читаю его с использованием pd.read_csv()
без при назначении dtypes ошибка не возникает:
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, допускающий значение NULL, а не 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