如何利用字符串拼接函数结合apply方法更新Pandas DataFrame的完整地址列
如何利用字符串拼接函数结合apply方法更新Pandas DataFrame的完整地址列
嘿,我看你已经把地址拼接的核心逻辑写得相当靠谱了!问题出在你调用函数的方式上——你的create_address是为单个字符串设计的,但你直接把整个DataFrame的列(也就是Pandas Series对象)传进去了,这就导致函数没法逐行处理每一条数据~
别担心,只需要修改最后一行的赋值代码,用Pandas的apply方法来逐行调用你的函数就行,你的函数本身完全不用改!
修改后的赋值代码是这样的:
df["address"] = df.apply(lambda row: create_address(row["Street"], row["City"], row["County"], row["PostalCode"]), axis=1)
我给你拆解下为啥这样写就对了:
apply加上axis=1参数,就表示对DataFrame的每一行单独操作- 这里的
lambda row就是把当前循环到的行对象传进去,我们从行里取出对应的Street、City等单个字段值,再传给你的create_address函数 - 这样每一行都会生成对应的非空字段拼接后的地址,最后批量赋值给新的
address列
你原来的写法为啥不行呢?因为df["Street"]返回的是一整列数据(Series),函数里的if street:判断的是这个Series整体是否为空,而不是每个元素是否为空,根本没法实现逐行的空值判断和拼接。
你的create_address函数逻辑很赞——自动跳过空值,用, 拼接非空项,还会去掉末尾多余的符号,完全符合你想要的效果,比如某行City为空时,就会自动跳过,生成5 Test Street, West Sussex, RH5 3BX这种正确格式的地址。
备注:内容来源于stack exchange,提问作者CGarden
相关产品推荐
相关产品推荐

