Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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_List_Dataframe - Fatal编程技术网

Python 如何将两个列表转换为一个数据帧,并将其中一个列表作为列表列表?

Python 如何将两个列表转换为一个数据帧,并将其中一个列表作为列表列表?,python,pandas,list,dataframe,Python,Pandas,List,Dataframe,我从一个yml文件中获取数据,所以我可以得到两个列表,如下所示: 其中一个名为list_products的列表包含产品名称: ['ABCD' 'LTAP' 'DEFG' 'FFEE'] 另一个名为list_id的元素包含一个id列表,有时元素可以是一个列表: [[100, 200], [3333], [1500,99, 870], [2]] 当只使用列表ID时,我可以得到一个数据帧,这是我使用的代码: flat_list = [item for sublist in list_ids

我从一个yml文件中获取数据,所以我可以得到两个列表,如下所示:

其中一个名为list_products的列表包含产品名称:

['ABCD'
'LTAP'
'DEFG'
'FFEE']
另一个名为list_id的元素包含一个id列表,有时元素可以是一个列表:

[[100, 200],
 [3333],
 [1500,99, 870],
 [2]]
当只使用列表ID时,我可以得到一个数据帧,这是我使用的代码:

flat_list = [item for sublist in list_ids for item in sublist]
id_df = pd.DataFrame(flat_list,columns=['id'])
结果是:

id
100
200
3333
1500
99
870
2
现在,我想要一个带有产品名称的数据框。我想得到这个:

id       name
100      'ABCD'
200      'ABCD'
3333     'LTAP'
1500     'DEFG'
99       'DEFG'
870      'DEFG'
2        'FFEE'
试爆

试爆

您可以使用zip预处理数据,然后构建DF

names = ['ABCD', 'LTAP', 'DEFG', 'FFEE']
list_ids = [[100, 200], [3333], [1500, 99, 870], [2]]

flat_list = [(item, name) for sublist, name in zip(list_ids, names) for item in sublist]
id_df = pd.DataFrame(flat_list, columns=['id', 'name'])
中间平面列表为

或者使用原始数据构建df,然后使用explode

中间pd.DataFrame{'id':list_id,'name':names}为

您可以使用zip预处理数据,然后构建DF

names = ['ABCD', 'LTAP', 'DEFG', 'FFEE']
list_ids = [[100, 200], [3333], [1500, 99, 870], [2]]

flat_list = [(item, name) for sublist, name in zip(list_ids, names) for item in sublist]
id_df = pd.DataFrame(flat_list, columns=['id', 'name'])
中间平面列表为

或者使用原始数据构建df,然后使用explode

中间pd.DataFrame{'id':list_id,'name':names}为

如果您不想使用explode功能,因为它仅适用于>0.25的版本,则可以使用以下功能:

In [473]: d = {i : list_ids[c] for c, i in enumerate(named_list)}
In [474]: df_out = pd.DataFrame([(var, key) for (key, L) in d.items() for var in L], columns=['id', 'name'])

In [475] df_out
Out[475]: 
     id  name
0   100  ABCD
1   200  ABCD
2  3333  LTAP
3  1500  DEFG
4    99  DEFG
5   870  DEFG
6     2  FFEE
如果您不想使用explode功能,因为它仅适用于>0.25的版本,则可以使用以下功能:

In [473]: d = {i : list_ids[c] for c, i in enumerate(named_list)}
In [474]: df_out = pd.DataFrame([(var, key) for (key, L) in d.items() for var in L], columns=['id', 'name'])

In [475] df_out
Out[475]: 
     id  name
0   100  ABCD
1   200  ABCD
2  3333  LTAP
3  1500  DEFG
4    99  DEFG
5   870  DEFG
6     2  FFEE
             id  name
0       [100, 200]  ABCD
1           [3333]  LTAP
2  [1500, 99, 870]  DEFG
3              [2]  FFEE
In [473]: d = {i : list_ids[c] for c, i in enumerate(named_list)}
In [474]: df_out = pd.DataFrame([(var, key) for (key, L) in d.items() for var in L], columns=['id', 'name'])

In [475] df_out
Out[475]: 
     id  name
0   100  ABCD
1   200  ABCD
2  3333  LTAP
3  1500  DEFG
4    99  DEFG
5   870  DEFG
6     2  FFEE