pd.NA和相关的pandas数组dtypes正在解决pandas中丢失数据的一些最烦人的问题。在创建这样的DataFrame时,默认情况下如何使用pd.NA?
import pandas as pd
pd.DataFrame.from_records([
{'a': 1, 'b': 'x'},
{'b': 'y', 'c': 1.7},
])
# Pandas 1.2 output
# a b c
# 0 1.0 x NaN
# 1 NaN y 1.7
# Wanted: using pd.NA by default, not NaN.
特别是,如果我在事后转换该表达式的结果,a
列已经转换为float(使用NaN作为缺失的标记(,这有点不幸。
(截至本文撰写之时,pd.NA仍处于实验阶段,但我想选择加入(。
就像评论中提到的@sammywemmy一样,可能的解决方案是在from_records
之后添加代码,例如DataFrame.convert_dtypes
:
df = pd.DataFrame.from_records([
{'a': 1, 'b': 'x'},
{'b': 'y', 'c': 1.7},
])
print (df.convert_dtypes())
a b c
0 1 x <NA>
1 <NA> y 1.7
print (df.convert_dtypes().dtypes)
a Int64
b string
c Float64
dtype: object
这个怎么样?
df = pd.DataFrame.from_records([
{'a': 1, 'b': 'x'},
{'b': 'y', 'c': 1.7},
])
df.fillna(pd.NA, inplace=True)