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

如何按索引匹配拼接不同长度DataFrame列字符串及问题排查

解决不同长度DataFrame索引匹配行的字符串拼接问题

问题描述

需要将两个不同长度的DataFrame(df1有1000条数据,df2有100条)中索引匹配的行的File-Name:列字符串进行拼接,同时保留df1中未匹配的900条数据的原内容。但使用以下代码后,df1中未匹配行的File-Name:列变为NaN,仅匹配行拼接正确:

df1["File-Name:"] = df1["File-Name:"].str.cat(df2["File-Name:"])

示例数据

df1示例:

File-Name:                date-time:    Size:
0               ./.c9           2024-04-26 18:07   830172
1               ./.nvm          2024-03-29 19:09   506588
...
14  ./.c9/dependencies/...  2024-03-06 19:27   166936

df2示例:

File-Name:
14  85de0311e77fec00f3ce2303de1affbe390e7b22b96402f...
18  e04e9ef74933c4cab24ec0f62a973d0b06e59e466286a73...
...

问题原因

str.cat()方法在拼接时,如果对应的df2行不存在(即df1索引在df2中无匹配),会将df2对应位置视为NaN。字符串与NaN拼接的结果为NaN,导致df1未匹配行的原内容被覆盖。

解决方案

提供两种可行的解决方法,按需选择:

方法1:仅对共同索引行进行拼接(高效)

先提取两个DataFrame的共同索引,仅对这些索引的行执行拼接操作,不影响其他行的原内容:

# 获取df1和df2的共同索引
common_idx = df1.index.intersection(df2.index)
# 仅对共同索引的行拼接字符串
df1.loc[common_idx, "File-Name:"] += df2.loc[common_idx, "File-Name:"]

方法2:对齐索引后拼接(简洁)

将df2的File-Name:列按df1的索引重新对齐,缺失位置填充空字符串,再执行拼接:

# 重新对齐df2的索引,缺失位置填充空字符串
aligned_df2_col = df2["File-Name:"].reindex(df1.index, fill_value="")
# 拼接字符串,未匹配行因拼接空字符串保持原内容
df1["File-Name:"] = df1["File-Name:"].str.cat(aligned_df2_col)

两种方法都能实现目标:未匹配行保留原File-Name:内容,匹配行完成字符串拼接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:28:14