[英]Pandas - split column with dictionary into two columns with key and value
這是我的專欄:
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(":")
有誰知道如何實現這一目標? 最好是可以在一列中處理多個字典的東西?
你可以這樣做:
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)
Output
type offer_id
0 offer_id 0b1e1539f2cc45b7b9fa7c272da2e1d7
1 offer_id 2906b810c7d4411798c6938adc9daaa5
2 offer_id fafdcd668e3743c1bb461111dcafc2a4
可以將先前響應中使用的方法更改為用於列中的多個字典項,如下所示:
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)
Output:
key1 value1 key2 value2
0 offer id 0b1e1539f2cc45b7b9fa7c272da2e1d7 abc 123
1 offer id 2906b810c7d4411798c6938adc9daaa5 def 456
您可以使用:
df = df['value'].apply(lambda x: pd.Series(*x.items()))
df.columns = ['type', 'offer_id']
Output:
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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.