Python 如何将字典、集合、元组列表的多列转换为列
我有一些结构和数据Python 如何将字典、集合、元组列表的多列转换为列,python,pandas,dictionary,tuples,Python,Pandas,Dictionary,Tuples,我有一些结构和数据 CusID Name Shop Item Card Type Price 1 Paul Pascal [{"Food":"001","Water":"Melon","Dessert":"Mango"}] [{"Main":"Yes", "Second":""}] {
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)
这是我的dataframe代码。
列表的字典中有“”,但dataframe看起来没有区别
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)
不是动态的,但这可以通过以下方法解决:
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)
不是动态的,但这可以通过以下方法解决:
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)
对于具有列表和字典的列,通常最好粘贴
df.to_dict()
,因为很难复制数据对于具有列表和字典的列,通常最好粘贴df.to_dict()
,因为很难复制数据,因为数据帧结构不同,所以无法在我的代码中工作。我有‘,比如‘Item’:‘[{“Food”:“001”,“Water”:“humber”,“sarth”:“Mango”}’’。在您的代码中,'Item':[{“Food”:“001”,“Water”:“甜瓜”,“甜点”:“Mango”}]df[“Item”]的结果是[,那么它不起作用。在我的代码中它不能起作用,因为有不同的数据帧结构。我有',比如'Item':[{“Food”:“001”,“Water”:“甜瓜”,“甜点”:“Mango”}]。在您的代码中,'Item':[{“Food”:“001”,“Water”:“mongo”,“甜点”:“Mango”}]df[“Item”]的结果。str[0]为[,则无效