首页 > 解决方案 > 将列转换为字符串,保留 NaN(作为 None 或空白)

问题描述

我想在列表中格式化一堆数字。最简单的方法是首先将其转换为一堆字符串。这是我如何执行此操作的示例:

df[col_name].astype('str').tolist()

但是,这个问题是我得到的值如下:

['12.19', '13.99', '1.00', 'nan', '9.00']

有没有办法可以将'nan'值返回为None空字符串或空字符串,例如:

['12.19', '13.99', '1.00', None, '9.00']

或者:

['12.19', '13.99', '1.00', '', '9.00']

我该怎么做这两个?

标签: pythonpandas

解决方案


使用df.astype(str, skipna=True),它将跳过所有 NA 类型。

例子:

import pandas as pd
df=pd.Series([12.19, 13.99, 1.00, None, 9.00])
print(df.astype(str, skipna=True).to_list())
pd.isna(df.astype(str, skipna=True))

输出:

['12.19', '13.99', '1.0', nan, '9.0']
0    False
1    False
2    False
3     True
4    False
dtype: bool

如果你真的需要它来None代替np.nan,那么添加df=df.where(pd.notnull(df), None).

例子:

df=pd.Series([12.19, 13.99, 1.00, None, 9.00])
df=df.astype(str, skipna=True)
df=df.where(pd.notnull(df), None)
print(df.to_list())

输出:

['12.19', '13.99', '1.0', None, '9.0']

注意: skipna参数从.astype()pandas 1.0 版本中消失,该问题目前已于 2020 年 2 月 6 日开放。

astype(str) / astype_unicode: np.nan 转换为 "nan" (checknull, skipna)

Series.astype(str, skipna=True) 在 1.0 版本中消失了


推荐阅读