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]
我在 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]