如何在熊猫的应用函数中测试nan?

Hun*_*nle 5 python nan dataframe pandas

我有一个简单的apply函数,我在一些列上执行.但是,它不断被NaN价值绊倒pandas.

input_data = np.array(
[
[random.randint(0,9) for x in range(2)]+['']+['g'],
[random.randint(0,9) for x in range(3)]+['g'],
[random.randint(0,9) for x in range(3)]+['a'],
[random.randint(0,9) for x in range(3)]+['b'],
[random.randint(0,9) for x in range(3)]+['b']
]
)

input_df = pd.DataFrame(data=input_data, columns=['B', 'C', 'D', 'label'])
Run Code Online (Sandbox Code Playgroud)

我有一个像这样的简单lambda:

input_df['D'].apply(lambda aCode: re.sub('\.', '', aCode) if not np.isnan(aCode) else aCode)
Run Code Online (Sandbox Code Playgroud)

它会被NaN值绊倒:

File "<pyshell#460>", line 1, in <lambda>
    input_df['D'].apply(lambda aCode: re.sub('\.', '', aCode) if not np.isnan(aCode) else aCode)
TypeError: Not implemented for this type
Run Code Online (Sandbox Code Playgroud)

所以,我尝试只测试Pandas补充的nan值:

np.isnan(input_df['D'].values[0])
np.isnan(input_df['D'].iloc[0])
Run Code Online (Sandbox Code Playgroud)

两者都得到同样的错误.

我不知道如何测试除了以外的纳米值np.isnan.有更简单的方法吗?谢谢.

EdC*_*ica 7

您的代码失败,因为您的第一个条目是一个空字符串,np.isnan并且不理解空字符串:

In [55]:
input_df['D'].iloc[0]

Out[55]:
''

In [56]:
np.isnan('')

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-56-a9f139a0c5b8> in <module>()
----> 1 np.isnan('')

TypeError: Not implemented for this type
Run Code Online (Sandbox Code Playgroud)

ps.notnull 确实有效:

In [57]:
import re
input_df['D'].apply(lambda aCode: re.sub('\.', '', aCode) if pd.notnull(aCode) else aCode)

Out[57]:
0     
1    3
2    3
3    0
4    3
Name: D, dtype: object
Run Code Online (Sandbox Code Playgroud)

但是,如果您只想更换某些东西,那么只需使用.str.replace:

In [58]:
input_df['D'].str.replace('\.','')

Out[58]:
0     
1    3
2    3
3    0
4    3
Name: D, dtype: object
Run Code Online (Sandbox Code Playgroud)