Pandas筛选DataFrame字典列指定键值行并提取字段值方法
你之前写的str.contains筛选无效,核心原因是space列存储的是原生Python字典类型数据,不是字符串,直接调用字符串匹配方法无法识别字典内的键值对,所以筛选没有结果。
正确实现代码
1. 筛选符合条件的原始行
三个筛选条件完全等价(均对应221号Pm-3m立方空间群),任选其一即可:
# 方式1:按symbol键匹配 filtered_df = df[df['space'].apply(lambda x: x['symbol'] == 'Pm-3m')].copy() # 方式2:按hall键匹配 # filtered_df = df[df['space'].apply(lambda x: x['hall'] == '-P 4 2 3')].copy() # 方式3:按number键匹配 # filtered_df = df[df['space'].apply(lambda x: x['number'] == 221)].copy()
执行完上述代码,得到的filtered_df就是保留完整space字典列的筛选结果,和要求的第一步输出格式完全一致。
2. 替换space列为symbol值
提取每行字典中symbol键对应的值,覆盖原space列即可得到最终结果:
filtered_df['space'] = filtered_df['space'].apply(lambda x: x['symbol'])
异常情况处理
如果运行代码时报错提示TypeError: string indices must be integers,说明你的space列存的是字符串格式的字典(不是真正的字典对象),先执行下面的代码把字符串转成字典,再跑上面的筛选、替换逻辑即可:
import ast df['space'] = df['space'].apply(ast.literal_eval)
内容的提问来源于stack exchange,提问作者Neelesh Gupta
相关产品推荐
相关产品推荐

