Pandas如何从已有Query列拆分键值对生成新列并设置表头
解决Pandas拆分Query列并生成键值对列的问题
嘿,作为Pandas新手能想到拆分Query列已经很棒啦!我来帮你完成剩下的步骤,轻松实现你想要的DataFrame格式~
第一步:先构造/加载你的原始数据
首先我们先把你提供的样本数据转成Pandas DataFrame(如果已经加载好可以跳过这一步):
import pandas as pd # 构造样本数据 data = { 'Col1': [10000, 10001], 'Col2': [101, 102], 'Query': ['$name=XXX&#age=18&#mark=100', '$name=YYY&#age=17&#mark=95'] } rundf = pd.DataFrame(data)
第二步:拆分Query列的键值对并生成新列
你已经完成了用&拆分Query列的操作,接下来我们要把每个拆分后的键=值字符串进一步拆分,转成字典后自动生成列名,再合并到原DataFrame中:
# 将拆分后的列表转为键值对字典,再转为DataFrame query_details = rundf['Query'].str.split('&').apply( lambda x: dict(item.split('=') for item in x) ).apply(pd.Series) # 横向合并原数据和新生成的键值对列 final_df = pd.concat([rundf, query_details], axis=1)
代码解释
rundf['Query'].str.split('&'):这就是你已经完成的步骤,把每个Query字符串拆分为['$name=XXX', '#age=18', '#mark=100']这样的列表lambda x: dict(item.split('=') for item in x):对每个列表里的元素,按=拆分成键和值,转成{'$name': 'XXX', '#age': '18', '#mark': '100'}这样的字典.apply(pd.Series):把字典自动转为DataFrame,字典的键会直接成为新的列名,对应的值填充到对应行pd.concat([rundf, query_details], axis=1):横向合并原始DataFrame和新生成的键值对DataFrame,得到你想要的最终格式
最终效果
打印final_df会得到你期望的结果:
Col1 Col2 Query $name #age #mark 0 10000 101 $name=XXX&#age=18&#mark=100 XXX 18 100 1 10001 102 $name=YYY&#age=17&#mark=95 YYY 17 95
另外补充一点:如果你的真实数据中,不同行的Query包含的键不统一(有的行有额外键,有的行缺少某些键),这种方法也能自动适配,缺失的键对应位置会填充NaN,非常灵活~
内容的提问来源于stack exchange,提问作者Smith Dwayne
相关产品推荐
相关产品推荐

