如何将字典、集合、元组列表的多列转换为列
Posted
技术标签:
【中文标题】如何将字典、集合、元组列表的多列转换为列【英文标题】:How to convert multiple columns of list of dictionary, set, tuple to columns 【发布时间】:2020-10-06 06:30:02 【问题描述】:我有一些结构和数据
CusID Name Shop Item Card Type Price
1 Paul Pascal ["Food":"001","Water":"Melon","Dessert":"Mango"] ["Main":"Yes", "Second":""] "VIP":"YES" 24000
2 Mark Casio ["Food":"001","Water":"Apple","Dessert":"Mango"] ["Main":"", "Second":"Yes"] "VIP":"YES" 30800
3 Bill Nike ["Food":"004","Water":"","Dessert":""] [] 900
我想拆分项目、卡片和类型列。这是预期的输出
Name Shop Food Water Dessert Card_Main Card_Second VIP Price
Paul Pascal 1 Melon Mango Yes YES 24000
Mark Casio 1 Apple Mango Yes YES 30800
Bill Nike 4 900
数据框代码:
d = ['CusID': 1, 'Name': 'Paul', 'Shop': 'Pascal',
'Item': ["Food":"001","Water":"Melon","Dessert":"Mango"],
'Card': ["Main":"Yes", "Second":""], 'Type': "VIP":"YES", 'Price': 24000,
'CusID': 2, 'Name': 'Mark', 'Shop': 'Casio', 'Item': ["Food":"001","Water":"Apple","Dessert":"Mango"],
'Card': ["Main":"", "Second":"Yes"], 'Type': "VIP":"YES", 'Price': 30800,
'CusID': 3, 'Name': 'Bill', 'Shop': 'Nike', 'Item': ["Food":"004","Water":"","Dessert":""],
'Card': [], 'Type': , 'Price': 900]
df = pd.DataFrame(d)
这是我的数据框代码。 列表字典中有“ ”,但数据框看起来没有区别!
d = ['CusID': 1, 'Name': 'Paul', 'Shop': 'Pascal',
'Item': '["Food":"001","Water":"Melon","Dessert":"Mango"]',
'Card': '["Main":"Yes", "Second":""]', 'Type': '"VIP":"YES"', 'Price': 24000,
'CusID': 2, 'Name': 'Mark', 'Shop': 'Casio', 'Item': '["Food":"001","Water":"Apple","Dessert":"Mango"]',
'Card': '["Main":"", "Second":"Yes"]', 'Type': '"VIP":"YES"', 'Price': 30800,
'CusID': 3, 'Name': 'Bill', 'Shop': 'Nike', 'Item': '["Food":"004","Water":"","Dessert":""]',
'Card': [], 'Type': , 'Price': 900]
df = pd.DataFrame(d)
【问题讨论】:
对于具有列表和字典的列,通常最好粘贴df.to_dict()
,因为它很难重现数据
【参考方案1】:
不是那么动态,但可以使用以下方法解决:
a = pd.DataFrame(df.pop('Item').str[0].dropna().tolist())
b = pd.DataFrame(df.pop('Card').str[0].dropna().tolist()).add_prefix('Card_')
c = pd.DataFrame(df.pop('Type').tolist())
out = df.join(i for i in [a,b,c]).fillna('')
print(out)
CusID Name Shop Price Food Water Dessert Card_Main Card_Second VIP
0 1 Paul Pascal 24000 001 Melon Mango Yes YES
1 2 Mark Casio 30800 001 Apple Mango Yes YES
2 3 Bill Nike 900 004
【讨论】:
它不能在我的代码中工作,因为有不同的数据帧结构。我有 ' ' 例如 'Item': '["Food":"001","Water":"Melon","Dessert":"Mango"]'。在您的代码中,'Item': ["Food":"001","Water":"Melon","Dessert":"Mango"] df["Item"].str[0]的结果是[,那就不行了以上是关于如何将字典、集合、元组列表的多列转换为列的主要内容,如果未能解决你的问题,请参考以下文章
Python面试必考重点之列表,元组和字典第一关——如何定义集合/集合与列表有什么区别/如何去掉列表(元组)中重复的元素