Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将字典、集合、元组列表的多列转换为列_Python_Pandas_Dictionary_Tuples - Fatal编程技术网

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]为[,则无效