Python 将 NAN 更改为零向量

标签 python python-3.x pandas nan fillna

我有一个 Python 问题。我使用 doc2vec 构建了一个段落向量,并将其转换为时间序列。所以我有一个索引,它是日期,然后是 8 个公司,每天每个公司都有一个 100 维的向量来表示新闻文章。但是,有些日子没有文章,返回 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 将 NAN 更改为零向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55143677/

相关文章:

python - 为什么要为自己设置一个字典浅拷贝?

python - 在python中的cv::UMat::convertTo

python - 如何减少 list-dict 键引用的处理时间

python - tensorflow 中 numpy.linalg.pinv 的替代方案

python - 引发异常后继续执行循环

python - 使用列表中的源路径来聚合数据框中的成本

python - pandas - 包括所有列和行对值

python - Pandas 数据帧 : Extract numerical values (including decimals) from string

python-3.x - 使用多摄像头检测 Tensorflow 对象

python - 从基于文件的列和行中的最大值中删除重复项 -pandas