【问题标题】:Convert DataFrame Column's String to other Columns like a dictionary将 DataFrame 列的字符串转换为其他列,如字典
【发布时间】:2021-04-23 04:19:43
【问题描述】:

我有一个这样的数据框:

  id                contact
0  101   {"ref": 201, "name": "Alejandro"}
1  102   {"ref": 202, "name": "Betty"}  
2  103   {"ref": 203, "name": "Jose"}
3  104   {"ref": 204, "name": "Alek"}
4  105   {"ref": 205, "name": "Daniela"}

...

联系人列是一个字符串列,我想转换为字典,然后在 DataFrame 中添加一个列 ref 和一个名为 name 的列...

【问题讨论】:

  • 一开始你是怎么得到这个数据框的?也许应该有更快的方法来重新初始化它......
  • 在 lambda 中试试这个:geeksforgeeks.org/…

标签: python python-3.x pandas dataframe jupyter-notebook


【解决方案1】:

你可以试试这个:


import pandas as pd


d = {
    'ID': [101, 102, 103, 104, 105],
    'contact': [{"ref": 201, "name": "Alejandro"},
                {"ref": 202, "name": "Betty"},
                {"ref": 203, "name": "Jose"},
                {"ref": 204, "name": "Alek"},
                {"ref": 205, "name": "Daniela"}]
}

df = pd.DataFrame(d)
df2 = pd.concat([df, df['contact'].apply(pd.Series)], axis=1)

print(df2)

    ID                            contact  ref       name
0  101  {'ref': 201, 'name': 'Alejandro'}  201  Alejandro
1  102      {'ref': 202, 'name': 'Betty'}  202      Betty
2  103       {'ref': 203, 'name': 'Jose'}  203       Jose
3  104       {'ref': 204, 'name': 'Alek'}  204       Alek
4  105    {'ref': 205, 'name': 'Daniela'}  205    Daniela

【讨论】:

    【解决方案2】:

    您可以使用json.loads() 将字符串转换为字典。

    import pandas as pd
    import json 
    
    
    dic = dict(df['contact'])
    
    ref = []
    name = []
    
    for key, val in dic.items():
        x = json.loads(val)
        ref.append(x['ref'])
        name.append(x['name'])
    
    df['ref'] = ref
    df['name'] = name
    
    df
    

    输出:

        id      contact                             ref     name
    0   101     {"ref": 201, "name": "Alejandro"}   201     Alejandro
    1   102     {"ref": 202, "name": "Betty"}       202     Betty
    2   103     {"ref": 203, "name": "Jose"}        203     Jose
    3   104     {"ref": 204, "name": "Alek"}        204     Alek
    4   101     {"ref": 205, "name": "Daniela"}     205     Daniela
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2014-05-23
      • 2019-05-29
      • 1970-01-01
      相关资源
      最近更新 更多