GeoPandas中单元格字符串拼接出现异常结果的问题排查
问题:拼接GeoPandas列时出现
\n1等异常内容的原因 我在处理事故数据时,尝试用GeoPandas拼接多个列的字符串,代码如下:
import geopandas as gp accidents2020 = gp.read_file("Unfallorte2020_LinRef.shp") accidents2020['joined'] = f"{accidents2020['ULAND']}{accidents2020['UREGBEZ']}{accidents2020['UKREIS']}{accidents2020['UGEMEINDE']}"
但生成的joined列出现了包含\n1的异常内容:
0 0 12\n1 12\n2 12\n3 ... 1 0 12\n1 12\n2 12\n3 ... 2 0 12\n1 12\n2 12\n3 ... 3 0 12\n1 12\n2 12\n3 ... 4 0 12\n1 12\n2 12\n3 ...
单独查看accidents2020['ULAND']列时显示正常:
0 12 1 12 2 12 3 12 4 12
请问这些\n1等异常内容来自何处?
解答
异常来源
你直接用f-string拼接GeoPandas的Series对象时,Python会调用Series的字符串打印方法(__str__),返回的是整个Series的格式化输出——包含索引、换行符和多行内容,而不是逐元素的字符串拼接。
比如str(accidents2020['ULAND'])的输出是:
0 12 1 12 2 12 ...
里面的换行符\n和索引数字(比如1)就是你看到的\n1这类内容的来源。
正确的逐元素拼接方法
要用Pandas的向量化操作实现逐行拼接:
- 方法一:转字符串后用
+运算符
accidents2020['joined'] = ( accidents2020['ULAND'].astype(str) + accidents2020['UREGBEZ'].astype(str) + accidents2020['UKREIS'].astype(str) + accidents2020['UGEMEINDE'].astype(str) )
- 方法二:使用
str.cat()方法
cols_to_concat = [ accidents2020['UREGBEZ'].astype(str), accidents2020['UKREIS'].astype(str), accidents2020['UGEMEINDE'].astype(str) ] accidents2020['joined'] = accidents2020['ULAND'].astype(str).str.cat(cols_to_concat, sep='')
- 方法三:用
apply()逐行处理(适合复杂逻辑,性能略低)
accidents2020['joined'] = accidents2020.apply( lambda row: f"{row['ULAND']}{row['UREGBEZ']}{row['UKREIS']}{row['UGEMEINDE']}", axis=1 )
内容的提问来源于stack exchange,提问作者four-eyes
相关产品推荐
相关产品推荐

