如何在Pandas字典中通过条件语句移除地址拆分后的指定元素?
问题解决:无法对str对象执行pop操作的修复方案
你遇到的错误是因为直接对字符串调用了pop()方法——Python的字符串是不可变类型,没有pop()方法,这个方法仅适用于列表。正确的做法是先将地址字符串拆分为行列表,修改列表后再重新拼接成字符串。
方法一:使用Pandas的apply函数(推荐,更高效)
通过自定义处理函数批量清洗地址列:
import pandas as pd data = {'address': ["William J. Clare\n290 Valley Dr.\nCasper, WY 82604\nUSA", "1180 Shelard Tower\nMinneapolis, MN 55426\nUSA", "William N. Barnard\n145 S. Durbin\nCasper, WY 82601\nUSA", "215 S 11th ST"] } df = pd.DataFrame(data) def clean_address(addr): # 将地址拆分为行列表 lines = addr.split("\n") line_count = len(lines) # 根据行数执行不同的清理逻辑 if line_count == 4: lines = lines[1:] # 移除第一行 elif line_count == 5: lines = lines[2:] # 移除前两行 # 将剩余行重新拼接为字符串 return "\n".join(lines) # 生成清洗后的地址列(也可以直接替换原列) df['cleaned_address'] = df['address'].apply(clean_address) print(df)
方法二:遍历字典列表(兼容你的原始代码逻辑)
如果坚持使用字典列表的方式,修改后的代码如下:
import pandas as pd data = {'address': ["William J. Clare\n290 Valley Dr.\nCasper, WY 82604\nUSA", "1180 Shelard Tower\nMinneapolis, MN 55426\nUSA", "William N. Barnard\n145 S. Durbin\nCasper, WY 82601\nUSA", "215 S 11th ST"] } df = pd.DataFrame(data) df_dict = df.to_dict('records') for row in df_dict: addr_lines = row["address"].split("\n") line_len = len(addr_lines) if line_len == 4: addr_lines.pop(0) # 移除第一行 elif line_len == 5: addr_lines = addr_lines[2:] # 移除前两行 # 更新字典中的地址值 row["address"] = "\n".join(addr_lines) # 转换回DataFrame cleaned_df = pd.DataFrame(df_dict) print(cleaned_df)
核心修复点
- 先通过
split("\n")将地址字符串转换为行列表 - 对列表使用切片或
pop()方法移除指定元素(而非直接操作字符串) - 最后用
"\n".join(lines)将修改后的列表重新拼接为字符串
内容的提问来源于stack exchange,提问作者Sushmitha
相关产品推荐
相关产品推荐

