将计数矢量化器结果插入数据帧时出现问题
Issue while inserting count vectorizer results to the dataframe
我有一个形状为 (4237, 19)
的数据框,然后是其他形状为 (4237, 6)
的数据框,我需要按列组合这两个数据框,因此技术上生成的数据框应该是形状 (4237, 25)
但我得到的是 (5524, 25)
。我无法理解这个问题。
我用过的代码
social_media_vectorizer = CountVectorizer(lowercase=True)
train_social_media_vector = social_media_vectorizer.fit_transform(x_train["social_media"].values.astype("U"))
test_social_media_vector = social_media_vectorizer.transform(x_test["social_media"].values.astype('U'))
print(x_train.shape)
print(x_test.shape)
train_social_media_df = pd.DataFrame(train_social_media_vector.todense(), columns=social_media_vectorizer.get_feature_names_out())
test_social_media_df = pd.DataFrame(test_social_media_vector.todense(), columns=social_media_vectorizer.get_feature_names_out())
x_train = pd.concat([x_train, train_social_media_df], axis=1)
x_test = pd.concat([x_test, test_social_media_df], axis=1)
print("="*100)
print(x_train.shape)
print(x_test.shape)
print("="*100)
print(social_media_vectorizer.vocabulary_)
结果
(4237, 19)
(1816, 19)
====================================================================================================
(5524, 25)
(3058, 25)
====================================================================================================
{'facebook': 0, 'linkedin': 2, 'twitter': 4, 'instagram': 1, 'youtube': 5, 'producthunt': 3}
你确定 train_social_media_vector.todense()
的形状是 (4237, 6) 吗?好像是 (1287, 6)
尝试ignore_index=True
:
x_train = pd.concat([x_train, train_social_media_df], axis=1, ignore_index=True)
x_test = pd.concat([x_test, test_social_media_df], axis=1, ignore_index=True)
在执行 concat 之前检查 x_train
和 x_test
的索引。我假设它们的索引与其他索引不同。进行串联时,所有行都由相同的索引连接。默认情况下,缺失的行将用 NaN 填充。如果您根本不关心索引,只需在执行连接之前使用 .reset_index(drop=True)
删除它们,或者在调用 pd.concat()
时使用 ignore_index=True
忽略它们。请参阅上面@Corralien 的回答。
我有一个形状为 (4237, 19)
的数据框,然后是其他形状为 (4237, 6)
的数据框,我需要按列组合这两个数据框,因此技术上生成的数据框应该是形状 (4237, 25)
但我得到的是 (5524, 25)
。我无法理解这个问题。
我用过的代码
social_media_vectorizer = CountVectorizer(lowercase=True)
train_social_media_vector = social_media_vectorizer.fit_transform(x_train["social_media"].values.astype("U"))
test_social_media_vector = social_media_vectorizer.transform(x_test["social_media"].values.astype('U'))
print(x_train.shape)
print(x_test.shape)
train_social_media_df = pd.DataFrame(train_social_media_vector.todense(), columns=social_media_vectorizer.get_feature_names_out())
test_social_media_df = pd.DataFrame(test_social_media_vector.todense(), columns=social_media_vectorizer.get_feature_names_out())
x_train = pd.concat([x_train, train_social_media_df], axis=1)
x_test = pd.concat([x_test, test_social_media_df], axis=1)
print("="*100)
print(x_train.shape)
print(x_test.shape)
print("="*100)
print(social_media_vectorizer.vocabulary_)
结果
(4237, 19)
(1816, 19)
====================================================================================================
(5524, 25)
(3058, 25)
====================================================================================================
{'facebook': 0, 'linkedin': 2, 'twitter': 4, 'instagram': 1, 'youtube': 5, 'producthunt': 3}
你确定 train_social_media_vector.todense()
的形状是 (4237, 6) 吗?好像是 (1287, 6)
尝试ignore_index=True
:
x_train = pd.concat([x_train, train_social_media_df], axis=1, ignore_index=True)
x_test = pd.concat([x_test, test_social_media_df], axis=1, ignore_index=True)
在执行 concat 之前检查 x_train
和 x_test
的索引。我假设它们的索引与其他索引不同。进行串联时,所有行都由相同的索引连接。默认情况下,缺失的行将用 NaN 填充。如果您根本不关心索引,只需在执行连接之前使用 .reset_index(drop=True)
删除它们,或者在调用 pd.concat()
时使用 ignore_index=True
忽略它们。请参阅上面@Corralien 的回答。