如何将字典、集合、元组列表的多列转换为列

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基础(3) - 去掉列表或元组中的重复元素

列表 字典 元组 集合

Python列表元组集合字典的区别和相互转换

python 数据类型之列表元组字典集合

公用操作

Python面试必考重点之列表,元组和字典第一关——如何定义集合/集合与列表有什么区别/如何去掉列表(元组)中重复的元素