使用Pandas合并三列字符串为Address列失败,求解决方案
解决DataFrame多列字符串拼接为单列的问题
以下是几种可靠的方法,帮你把三列字符串拼接成符合要求的Address列:
方法1:直接字符串拼接(直观易用)
假设你的三列分别是Street、City、Postcode,直接用加号拼接并添加空格分隔:
df['Address'] = df['Street'] + ' ' + df['City'] + ' ' + df['Postcode']
如果列中存在空值(NaN),拼接结果会变成NaN,此时可以先用fillna('')替换空值:
df['Address'] = df['Street'].fillna('') + ' ' + df['City'].fillna('') + ' ' + df['Postcode'].fillna('')
方法2:使用str.cat方法(安全处理空值)
str.cat是Pandas专门用于字符串拼接的方法,支持多列拼接,还能统一处理空值:
df['Address'] = df['Street'].str.cat([df['City'], df['Postcode']], sep=' ', na_rep='')
该方法会自动将空值替换为空字符串,避免拼接结果出现NaN。
方法3:apply逐行处理(灵活自定义逻辑)
如果需要过滤空值或空字符串,避免出现连续空格,可以用apply自定义拼接逻辑:
import pandas as pd def combine_address(row): # 收集非空且非空白的字段 valid_parts = [part for part in [row['Street'], row['City'], row['Postcode']] if pd.notna(part) and str(part).strip() != ''] return ' '.join(valid_parts) df['Address'] = df.apply(combine_address, axis=1)
关键注意事项
确保参与拼接的三列都是字符串类型(object或string dtype),如果是数值类型(比如邮编被存为数字),先转换为字符串:
df[['Street', 'City', 'Postcode']] = df[['Street', 'City', 'Postcode']].astype(str)
内容的提问来源于stack exchange,提问作者Beatriz
相关产品推荐
相关产品推荐

