You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas问题:使用pd.concat合并时意外新增一行

解决Pandas concat后出现多余NaN行的问题

嘿,这个问题我之前处理数据的时候也踩过坑!咱们来拆解一下:你说原df删了一行后和两个tfidf的DataFrame都是9999行,但横向合并后却冒出10000行,还有整列的NaN,这大概率是三者的索引没有对齐导致的。

为什么会出现这种情况?

举个例子:假设原df本来是10000行,索引是0~9999,你删除了其中一行(比如索引为5000的行),此时df的索引变成了0~4999, 5001~9999(总共9999行,但索引里缺了5000)。而你的tfidf_desc和tfidf_title如果是基于处理后的df生成的,可能它们的索引是重新生成的连续序列0~9998;或者你是先生成了tfidf再删的df行,那tfidf的索引还是0~9999(但实际只有9999行)。

当你用pd.concat([df, tfidf_desc, tfidf_title], axis=1)时,Pandas会按索引进行对齐合并:如果某个索引值在其中一个DataFrame里存在,另一个里没有,就会自动补NaN,并且保留所有出现过的索引值,最终行数就是所有唯一索引的数量——这就是为什么会多出一行,还出现整列NaN的原因。

快速解决方案

给你两种靠谱的处理方式:

1. 合并前统一重置索引

把三个DataFrame的索引都重置成连续的整数,丢弃原来的索引:

# 重置每个DataFrame的索引,drop=True表示不保留原索引列
df_reset = df.reset_index(drop=True)
tfidf_desc_reset = tfidf_desc.reset_index(drop=True)
tfidf_title_reset = tfidf_title.reset_index(drop=True)

# 再进行合并
merged_df = pd.concat([df_reset, tfidf_desc_reset, tfidf_title_reset], axis=1)

这样三者的索引都是0~9998,合并时就能完美对齐,不会出现多余的行和NaN。

2. 确保生成tfidf时用的是删除行后的df

如果你是先生成了tfidf,然后才删除了df里的一行,那肯定会导致两者的索引/数据不匹配。正确的流程应该是:

# 第一步:先对原df进行筛选,移除不需要的行
df_filtered = df.drop(...)  # 你的筛选操作

# 第二步:基于筛选后的df生成tfidf特征
tfidf_desc = generate_tfidf(df_filtered['FullDescription'])  # 你的tfidf生成逻辑
tfidf_title = generate_tfidf(df_filtered['Title'])

# 第三步:合并,此时三者索引自然对齐
merged_df = pd.concat([df_filtered, tfidf_desc, tfidf_title], axis=1)

验证方法

你可以先打印一下三个DataFrame的索引,看看是不是有差异:

print("df索引:", df.index.values)
print("tfidf_desc索引:", tfidf_desc.index.values)
print("tfidf_title索引:", tfidf_title.index.values)

对比一下就能发现索引哪里不对啦。

内容的提问来源于stack exchange,提问作者anon_swe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:54:43