![](/img/trans.png)
[英]Preserving dtype as category after integer encoding in Pandas DataFrame column
[英]Preserving Pandas dataframe dtype while running astype
有没有办法在执行 astype 时保留 dataframe astype
? 我有一个 dataframe 在各种字段中有一堆空列表,所以我使用以下内容将每一列转换为字符串,然后替换列表:
data_normalized = data_normalized.astype(str).replace('[]', '', regex=False)
但是,由于这会将每一列转换为字符串,因此它还将 float64 和 integer 字段转换为字符串。 我想保留这些 dtypes 因为运行infer_objects
不起作用:
data_normalized = data_normalized.infer_objects()
如果我查看 data_normalized 的data_normalized
,它们都是object
。 有什么方法可以在不显式命名列的情况下保留非对象 dtypes?
您可以检查它是否为空列表,然后仅转换:
data_normalized.apply(lambda y: ['' if x=='[]' else x for x in y])
虽然列的数据类型为 Object,但当您访问单个值时,它将与原始值相同。
空列表的长度为 0,因为无论如何您都想用空字符串替换,我们不需要担心这些。
df=pd.DataFrame({'a':[[], 1, 2, 3], 'b': [4, 5, 6, 8.6],
'c': ['foo', [], [], 'bar']})
for col in df:
try:
df.loc[df[col].str.len().eq(0), col] = ''
except AttributeError:
continue
print(df)
# a b c
#0 4.0 foo
#1 1 5.0
#2 2 6.0
#3 3 8.6 bar
print(df.dtypes)
#a object
#b float64 # Remained Float
#c object
#dtype: object
df['a'].to_numpy()
#array(['', 1, 2, 3], dtype=object) # individual values remain `Int`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.