Dataframe .join 从实际值创建 NaN 值列

Dataframe .join creates NaN valued column from actual values

我想要做的是为 11410 个字符串创建一个单词包,然后在单词列的末尾附加我存储在另一个数据框中的结果。我有一个包含列 'result' 的数据框,我试图将其作为新列附加到我现有的词袋数据框旁边。但是,我得到一个充满 'NaN' 值的列。

我的数据框尺寸为 11410 x 111,我想在末尾添加我的数据框列作为新列。我的代码如下

bow = vectorizer.fit_transform(df_train['text']) #creates the vectorizer with the bag of words

bow_df = pd.DataFrame(bow.toarray(),columns=vectorizer.get_feature_names_out()) # turn the result to a dataframe

res = df_train['result']      #column of the dataframe that I want to insert

bow_df = bow_df.join(res)     #this SHOULD (? but doesn't) do what I want

因此我最终得到 11410 x 112,但最后一列全是 NaN。

我的资源结构:

226115    POS
191228    NEU
198033    NEG
100300    NEU
208472    POS
         ... 
119879    POS
103694    NEU
131932    NEU
146867    NEU
121958    NEU

我的bow_df结构:

 age ages also amp apollo approval approved arm astrazeneca aug  ...  \
0       0    0    0   0      0        0        0   0           0   0  ...   
1       0    0    0   0      0        0        0   0           0   0  ...   
2       0    0    0   0      0        0        0   0           0   0  ...   
3       0    0    0   0      0        0        0   0           0   0  ...   
4       0    0    0   0      0        0        1   0           0   0  ...   
...    ..  ...  ...  ..    ...      ...      ...  ..         ...  ..  ...   
11405   0    0    0   0      0        1        0   0           0   0  ...   
11406   0    0    0   0      0        0        0   0           0   0  ...   
11407   0    0    0   0      0        0        0   0           0   0  ...   
11408   1    0    0   0      0        0        0   0           0   1  ...   
11409   1    0    0   0      0        0        0   0           0   0  ...   

      urban us use vaccinated vaccination vaccine vaccines world would year  
0         0  0   0          0           0       0        0     0     0    0  
1         0  0   0          0           0       0        0     0     0    0  
2         0  0   0          0           0       0        0     0     0    0  
3         0  0   0          0           0       0        1     0     0    0  
4         0  0   0          0           0       1        0     0     0    0  
...     ... ..  ..        ...         ...     ...      ...   ...   ...  ...  
11405     0  0   1          0           0       0        0     0     0    0  
11406     0  0   0          0           0       0        0     0     0    0  
11407     0  0   0          0           0       0        0     0     0    0  
11408     0  0   0          0           0       0        0     0     0    0  
11409     0  0   0          0           0       0        0     0     0    0  

我什至尝试 bow_df = bow_df.astype(str) 以防它是这种类型但没有用。

谢谢大家

如果没有另外指定 (kwarg on),

join 将加入 index-on-index。 res 的索引不在 range(11410) 中,因此您必须在加入前重置索引:

res.reset_index(drop=True, inplace=True)

或从 df_train 建造:

res = df_train['result'].reset_index(drop=True)

因为索引不匹配。尝试 bow_df['result'] = res.values 删除 RHS 索引。