繁体   English   中英

在运行 astype 时保留 Pandas dataframe dtype

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM