繁体   English   中英

如何在忽略 NaN 的同时将 Pandas DataFrame 中的所有列转换为“对象”?

[英]How to convert all columns in Pandas DataFrame to 'object' while ignoring NaN?

我有一个数据框,我希望每一列都是字符串格式。 所以我这样做:

 df = df.astype(str)

问题在于,通过这种方式,所有 NaN 条目都转换为字符串 'nan'。 并且isnull返回false 有没有办法转换为字符串但保持空条目原样?

当您执行astype(str)astype(str)始终是object ,它是包含混合列的 dtype。 因此,您可以做的一件事是使用astype(str)将其转换为object ,就像您所做的那样,然后将nan替换为实际的NaN (本质上是一个浮点数),允许您使用诸如isnull方法访问它:

df.astype(str).replace('nan',np.nan)

例子:

df = pd.DataFrame({'col1':['x',2,np.nan,'z']})
>>> df
  col1
0    x
1    2
2  NaN
3    z

# Note the mixed str, int and null values:
>>> df.values
array([['x'],
       [2],
       [nan],
       ['z']], dtype=object)

df2 = df.astype(str).replace('nan',np.nan)

# Note that now you have only strings and null values:
>>> df2.values
array([['x'],
       ['2'],
       [nan],
       ['z']], dtype=object)

将您的空值转换为空字符串,然后将数据帧转换为字符串类型。

df.replace(np.nan, '').astype(str)

请注意,您可以通过以下方式测试“空值”:

df.apply(lambda s: s.str.len() == 0) 

对于系列,您可以仅在不为notnull的部分上使用astype而无需重新替换NaN

df = pd.DataFrame([1, np.nan, 'String'])
df[df.notnull()] = df[df.notnull()].astype(str)

正如评论中所述,对于 DataFrame,您可以使用

df.where(df.isna(), df.astype(str))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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