当您使用“外部”合并在某些值上合并两个索引数据帧时,python/pandas 会自动将 Null (NaN) 值添加到它无法匹配的字段。这是正常行为,但它会更改数据类型,您必须重新说明列应具有的数据类型。
fillna()
or dropna()
合并后似乎没有立即保留数据类型。我需要一个适当的表结构吗?
通常我会跑numpy np.where(field.isnull() etc)
但这意味着运行所有列。
有解决方法吗?
这实际上应该只是一个问题bool
or int
数据类型。float
, object
and datetime64[ns]
已经可以持有NaN
or NaT
而不改变类型。
因此,我建议使用新的可为空数据类型。您可以使用Int64
为你的整数和'boolean'
对于您的布尔列。这两个现在都支持缺失值<NA>
: pandas._libs.missing.NAType
import pandas as pd
df = pd.DataFrame({'a': [1]*6, 'b': [1, 2]*3, 'c': range(6)})
df2 = pd.DataFrame({'d': [1, 2], 'e': [True, False]})
df2['d'] = df2['d'].astype('Int64')
df2['e'] = df2['e'].astype('boolean')
df2.dtypes
#d Int64
#e boolean
#dtype: object
df.join(df2)
# a b c d e
#0 1 1 0 1 True
#1 1 2 1 2 False
#2 1 1 2 <NA> <NA>
#3 1 2 3 <NA> <NA>
#4 1 1 4 <NA> <NA>
#5 1 2 5 <NA> <NA>
df.join(df2).dtypes
#a int64
#b int64
#c int64
#d Int64 <- dtype preserved
#e boolean <- dtype preserved
With Int64
/Bool64
填充值仍然符合您指定的值,并且仅当您填充无法适合当前数据类型的值时,该列才会向上转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)