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 索引。
我想要做的是为 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)
以防它是这种类型但没有用。
谢谢大家
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 索引。