Python меняет NAN на вектор нулей - PullRequest
2 голосов
/ 13 марта 2019

У меня есть вопрос по Python.Я строю вектор абзаца, используя doc2vec, и преобразовываю его во временные ряды.Итак, у меня есть индекс, который является датой, а затем 8 компаний, и для каждого дня есть вектор измерения 100 для каждой компании, представляющей новостную статью.Однако бывают дни, когда нет статей, которые возвращают значения NaN.Теперь я хотел бы преобразовать их в нулевой вектор измерения 100.

Я попытался сделать это, используя следующий фрагмент кода:

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

Однако это не сработает, потому что я могуне заменяйте NaN списком или массивом.Есть ли где-нибудь, чтобы решить эту проблему?

Большое спасибо!

1 Ответ

1 голос
/ 13 марта 2019

Возможно, вы можете попробовать:

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]
...