Python 将 NAN 更改为零向量

Python change NAN to vector of zeros

我在 Python 中有一个问题。我使用 doc2vec 构建了一个段落向量并将其转换为时间序列。所以我有一个索引,它是日期,然后是 8 个公司,每天每个公司都有一个 100 维的向量来表示新闻文章。然而,有些日子没有文章,return NaN 值。现在我想将它们转换为 100 维的零向量。

我尝试使用以下代码片段来做到这一点:

test_df.fillna(value=np.zeros(100) , inplace = True)  

但是,这不起作用,因为我无法用列表或数组替换 NaN。有办法解决这个问题吗?

非常感谢!

也许你可以试试:

zeros = np.zeros(100)
series.apply(lambda x: x if isinstance(x,np.ndarray) else zeros)

举个例子(为了清楚起见,只有长度为 2 的向量):

series = pd.Series({1:np.array([1,2]), 2: np.nan, 3: np.array([3,4])})
series

1    [1, 2]
2       NaN
3    [3, 4]
dtype: object

zeros = np.zeros(2)
series = series.apply(lambda x: x if isinstance(x,np.ndarray) else zeros)
series

1        [1, 2]
2    [0.0, 0.0]
3        [3, 4]
dtype: object

如果您的数据在 DataFrame 中,那么类似的 applymap 模式应该可以工作:

df = pd.DataFrame({'company_a': {1:np.array([1,2]), 2: np.nan, 3: np.array([3,4])}, 'company_b': {1:np.nan, 2: np.array([9,7]), 3: np.nan}})
df

  company_a company_b
1    [1, 2]       NaN
2       NaN    [9, 7]
3    [3, 4]       NaN

zeros = np.zeros(2)
df = df.applymap(lambda x: x if isinstance(x,np.ndarray) else zeros)
df

    company_a   company_b
1      [1, 2]  [0.0, 0.0]
2  [0.0, 0.0]      [9, 7]
3      [3, 4]  [0.0, 0.0]