如何在Panda DataFrame.from_records中默认使用pd.NA



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)

最新更新