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

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']

我该怎么做这两个?

最佳答案

你可以这样试试。


>>> df[col_name].apply(lambda v: str(v) if str(v) != 'nan' else None).tolist()
['12.19', '13.99', '1.00', None, '9.00']
>>>
>>> df[col_name].apply(lambda v: str(v) if str(v) != 'nan' else '').tolist()
['12.19', '13.99', '1.00', '', '9.00']
>>>


>>> df[col_name].apply(lambda v: str(v) if not pd.isnull(v) else None).tolist()
['12.19', '13.99', '1.00', None, '9.00']
>>>
>>> df[col_name].apply(lambda v: str(v) if not pd.isnull(v) else '').tolist()
['12.19', '13.99', '1.00', '', '9.00']
>>>

这是详细的解释。
>>> import pandas as pd
>>> import numpy as np
>>>
>>> df = pd.DataFrame({
... "fullname": ['P Y', 'P T', 'T Y', 'N A', 'P Z'],
... "age": [36, 80, 25, 8, 34],
... "salary": ['12.19', '13.99', '1.00', np.nan, '9.00']
... })
>>>
>>> df
  fullname  age salary
0      P Y   36  12.19
1      P T   80  13.99
2      T Y   25   1.00
3      N A    8    NaN
4      P Z   34   9.00
>>>
>>> # PROBLEM
...
>>> col_name = "salary"
>>> df[col_name].astype("str").tolist()
['12.19', '13.99', '1.00', 'nan', '9.00']
>>>
>>> # SOLUTION
...
>>> df[col_name].apply(lambda v: str(v) if str(v) != 'nan' else None)
0    12.19
1    13.99
2     1.00
3     None
4     9.00
Name: salary, dtype: object
>>>
>>> df[col_name].apply(lambda v: str(v) if str(v) != 'nan' else '')
0    12.19
1    13.99
2     1.00
3
4     9.00
Name: salary, dtype: object
>>>
>>> df[col_name].apply(lambda v: str(v) if str(v) != 'nan' else None).tolist()
['12.19', '13.99', '1.00', None, '9.00']
>>>
>>> df[col_name].apply(lambda v: str(v) if str(v) != 'nan' else '').tolist()
['12.19', '13.99', '1.00', '', '9.00']
>>>
>>> df[col_name].apply(lambda v: str(v) if not pd.isnull(v) else None).tolist()
['12.19', '13.99', '1.00', None, '9.00']
>>>
>>> df[col_name].apply(lambda v: str(v) if not pd.isnull(v) else '').tolist()
['12.19', '13.99', '1.00', '', '9.00']
>>>

关于python - 将列转换为字符串,保留 NaN(作为 None 或空白),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53901398/

10-12 18:20
查看更多