2

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

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

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

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

非常感谢你!

4

1 回答 1

1

也许您可以尝试:

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]
于 2019-03-13T14:21:37.993 回答