【发布时间】:2016-05-15 22:26:43
【问题描述】:
我有一个简单的apply 函数,我在某些列上执行。但是,它不断被pandas 中的NaN 值绊倒。
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'])
我有一个像这样的简单 lambda:
input_df['D'].apply(lambda aCode: re.sub('\.', '', aCode) if not np.isnan(aCode) else aCode)
它会被 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
所以,我尝试只测试 Pandas 添加的 nan 值:
np.isnan(input_df['D'].values[0])
np.isnan(input_df['D'].iloc[0])
两者都得到相同的错误。
我不知道如何测试 np.isnan 以外的 nan 值。有没有更简单的方法来做到这一点?谢谢。
【问题讨论】:
-
input_df['D'].apply(lambda aCode: re.sub('\.', '', aCode) if pd.notnull(aCode) else aCode)工作,但你想做什么? -
例如这做同样的事情:
input_df['D'].str.replace('\.', '') -
您可以使用
math.isnan()来测试 nan 值。 -
pd.notnull有效。但我是唯一一个对np.isnan不起作用感到惊讶的人吗?我以为熊猫空值是建立在np nans? -
np.isnan不理解空字符串这就是原因
标签: python pandas dataframe nan