Pandas中字符串转列表再转字典的实现难题
解决Pandas DataFrame中字符串转字典的问题
嘿,我来帮你搞定这个把拆分后的列表转成字典的问题!看起来你已经迈出了第一步——把格式为"str1|str2, str3|str4"的字符串拆分成了元素列表,但接下来需要把这些元素两两配对,构建成键值对形式的字典对吧?
先优化字符串拆分的正则(可选但推荐)
你之前用的re.split("[',|']",x)正则其实有小问题:里面的单引号是多余的,而且没处理逗号后面的空格,可能会导致列表里出现空字符串或者带空格的元素。建议把正则改成r'[,|]\s?',这样可以同时按|或者, (逗号加可选空格)拆分,得到更干净的元素列表。
核心:把列表转成键值对字典
这里有两种高效的方法可以实现列表到字典的转换:
方法一:利用切片和zip
import pandas as pd import re # 示例数据 df = pd.DataFrame({'users': ["str1|str2, str3|str4", "str5|str6, str7|str8"]}) def str_to_dict(s): # 拆分字符串得到干净的元素列表 parts = re.split(r'[,|]\s?', s) # 用切片取偶数索引(键)和奇数索引(值),再用zip配对成字典 return dict(zip(parts[::2], parts[1::2])) # 应用到DataFrame列上 df['users_dict'] = df['users'].apply(str_to_dict)
方法二:利用iter迭代器(更高效)
这种方法通过迭代器一次性取两个元素配对,在处理长列表时性能更好:
def str_to_dict(s): parts = re.split(r'[,|]\s?', s) it = iter(parts) # 迭代器每次取两个元素,分别作为键和值 return dict(zip(it, it))
执行后,df['users_dict'].iloc[0]会返回:
{'str1': 'str2', 'str3': 'str4'}
处理格式不规范的异常情况
如果你的数据里存在格式错误的行(比如元素个数不是偶数),可以加个异常处理避免程序崩溃:
def str_to_dict(s): try: parts = re.split(r'[,|]\s?', s) it = iter(parts) return dict(zip(it, it)) except ValueError: # 可以根据需求返回空字典、原字符串或者其他默认值 return {}
内容的提问来源于stack exchange,提问作者Walter U.
相关产品推荐
相关产品推荐

