下面是我可复制的例子:
import pandas as pd
import numpy as np
df = pd.DataFrame({'x' : [np.zeros(2), np.array([1,2])], 'y' : [np.array([3,2]),0], 'z' : [np.array([4,5]),np.zeros(2)], 't' : [np.array([3,4]),np.array([4,5])]})
我的目标是将np.zeros(2)
更改为np.Nan
,以便能够计算除0以外的每一行的平均二维数组。
I have try:
df.replace(np.zeros(2),np.NaN)
df[df.eq(np.zeros(2)).any(axis=1)]
df.where(df == [np.zeros(2)])
df[df == np.zeros(2)]
如果我正在查找的项目不是数组,则所有这些都有望工作。
显然,作为Python的新手,肯定有一个概念我没有掌握。
不能将对象作为值进行矢量化。
使用applymap
和numpy.array_equal
:
df[df.applymap(lambda x: np.array_equal(x, np.zeros(2)))] = np.nan
Updateddf
:
x y z t
0 NaN [3, 2] [4, 5] [3, 4]
1 [1, 2] 0 NaN [4, 5]
allclose
:
df[df.applymap(lambda x: np.allclose(x, 0))] = np.nan
输出:
x y z t
0 NaN [3, 2] [4, 5] [3, 4]
1 [1, 2] NaN NaN [4, 5]