Pandas使用dictionary将列拆分为具有键和值的两列

2024-06-02 09:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的专栏:

transcript["value"][1:4]

1    {'offer id': '0b1e1539f2cc45b7b9fa7c272da2e1d7'}
2    {'offer id': '2906b810c7d4411798c6938adc9daaa5'}
3    {'offer id': 'fafdcd668e3743c1bb461111dcafc2a4'}

我努力做到的是:

       type                          offer_id
0  offer_id  0b1e1539f2cc45b7b9fa7c272da2e1d7
1  offer_id  2906b810c7d4411798c6938adc9daaa5
2  offer_id  fafdcd668e3743c1bb461111dcafc2a4

我试图将其转换为str,然后将其拆分,这似乎容易出错,实际上根本不起作用:

transcript["value"].str.split(":")

有人知道如何做到这一点吗?最好是能在一列中处理多个词典的东西


Tags: idvaluetype词典splittranscriptofferstr
3条回答

可以将上一个响应中使用的方法更改为用于以下列中的多个字典项:

import pandas as pd

data = [[[{'offer id': '0b1e1539f2cc45b7b9fa7c272da2e1d7'}, {'abc': '123'}]],
       [[{'offer id': '2906b810c7d4411798c6938adc9daaa5'}, {'def': '456'}]],
       [[{'offer id': 'fafdcd668e3743c1bb461111dcafc2a4'}, {'ghi': '789'}]]]

df = pd.DataFrame(data, columns = ['Values'])
df = pd.DataFrame([df.Values[0], df.Values[1]], columns = ['dict1','dict2'])

df1 = pd.DataFrame([{'key1': key, 'value1': value } for item in df['dict1'].tolist() 
    for key, value in item.items()])

df2 = pd.DataFrame([{'key2': key, 'value2': value } for item in df['dict2'].tolist() 
    for key, value in item.items()])

pd.concat([df1,df2], axis = 1)

输出:

      key1                    value1               key2  value2
0   offer id    0b1e1539f2cc45b7b9fa7c272da2e1d7    abc   123
1   offer id    2906b810c7d4411798c6938adc9daaa5    def   456

你可以做:

import pandas as pd

transcript = pd.DataFrame([
    [{'offer_id': '0b1e1539f2cc45b7b9fa7c272da2e1d7'}],
    [{'offer_id': '2906b810c7d4411798c6938adc9daaa5'}],
    [{'offer_id': 'fafdcd668e3743c1bb461111dcafc2a4'}]
], columns=['value'])


res = pd.DataFrame([{'type' : key, 'offer_id' : value } for d in transcript['value'].tolist() for key, value in d.items()])
print(res)

输出

       type                          offer_id
0  offer_id  0b1e1539f2cc45b7b9fa7c272da2e1d7
1  offer_id  2906b810c7d4411798c6938adc9daaa5
2  offer_id  fafdcd668e3743c1bb461111dcafc2a4

您可以使用:

df = df['value'].apply(lambda x: pd.Series(*x.items()))
df.columns = ['type', 'offer_id']

输出:

       type                          offer_id
0  offer_id  0b1e1539f2cc45b7b9fa7c272da2e1d7
1  offer_id  2906b810c7d4411798c6938adc9daaa5
2  offer_id  fafdcd668e3743c1bb461111dcafc2a4

如果钥匙与您的情况相同:

df['offer_id'] = df['value'].str.get('offer_id')
df['type'] = 'offer_id'

相关问题 更多 >