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

Python 熊猫:将列表列表转换为多列

Python 熊猫:将列表列表转换为多列,python,list,pandas,dataframe,iteration,Python,List,Pandas,Dataframe,Iteration,我不熟悉python和pandas,我想将列表列表(其中包含我从一堆文件中提取的信息)转换为单独的列。我检查了很多关于stackoverflow的帖子,到目前为止还没有找到适合我的。但是,如果你遇到任何类似的情况,请在评论中发布链接 我有这样一个数据帧(一个代表性示例): 两个列表([[1,20.1],[2,20.2]]和[[1,30.1],[2,30.2])具有相同的长度(并且将始终是),但是列表中的整数(1和2)可以是任何数字 我想将df转换成如下数据帧: Label 1(Nu

我不熟悉python和pandas,我想将列表列表(其中包含我从一堆文件中提取的信息)转换为单独的列。我检查了很多关于stackoverflow的帖子,到目前为止还没有找到适合我的。但是,如果你遇到任何类似的情况,请在评论中发布链接


我有这样一个数据帧(一个代表性示例):

两个列表(
[[1,20.1],[2,20.2]]
[[1,30.1],[2,30.2]
)具有相同的长度(并且将始终是),但是列表中的整数(
1
2
)可以是任何数字

我想将
df
转换成如下数据帧:

  Label     1(Number of the 1st ID)        7(Number of the 2nd ID)

    1        20.1                                30.1

    2        20.2                                30.2
   ID         0        1        2         3

0  1          1       20.1      2        20.2      

1  7          1       30.1      2        30.2    
其中将有三列:

  • 第一列(
    Label
    )包含列表中的第一个数字(因此在本例中,我们有integer
    1
    2
  • 第二列(
    1
    )的第一个ID号作为列标题,并包含每个列表的第二个值(
    20.1
    20.2
  • 第三列包含ID号7的相同信息

首先,我使用apply.(pd.Series)来拆分列表列表,得到如下内容(我称之为df2):

我想,我可以使用相同的技巧(apply.(pd.Series))再次拆分列,得到如下结果:

  Label     1(Number of the 1st ID)        7(Number of the 2nd ID)

    1        20.1                                30.1

    2        20.2                                30.2
   ID         0        1        2         3

0  1          1       20.1      2        20.2      

1  7          1       30.1      2        30.2    
然后,想办法从这里到我想去的地方

我写了这样的东西来再次拆分列表:

names = [x for x in df2.colmuns]

for name in names:
   df3 = df2[name].apply(pd.Series)
   print df3
在jupyter笔记本中,我得到以下结果(当我在
for
循环中包含
print df3
以检查输出时):

如果我在for循环中执行
df3.info()
,它会告诉我df3中有两个数据帧。(这正常吗?)

如果我调用
df3
,我会得到以下结果:

      0     1
0    1.0   30.1
1    2.0   30.2
似乎我正在覆盖
df3
,而不是将新数据附加到
df3

因此:

  • 我怎样才能避开这个问题?(可能创建一个新的数据框,并将拆分列附加到新的数据框?)

  • 如何将df3转换为所需的数据帧?我有一种感觉,我需要重塑我的数据帧,但我不知道如何做到这一点


如有任何建议,我们将不胜感激

根据列
Values\u a
中的数据结构,这里有一个可能的解决方法

>> x = pd.DataFrame({'ID': [1, 7],
>>                   'Values_a': [ [[1, 20.1], [2, 20.2]], 
>>                                 [[1, 30.1], [2, 30.2]] ] });
>> data = { ID: [v[1] for v in x.loc[x['ID'] == ID, 'Values_a'].values[0]]
>>          for ID in x['ID'] }
>> index = [v[0] for v in x['Values_a'].iloc[0]]
>> y = pd.DataFrame(data, index=index)
      1     7
1  20.1  30.1
2  20.2  30.2

尽管如此,我相信有一个更简单、更优雅的解决方案,
groupby

是否
Value\u a
值与第一组元素(在您的案例中为标签)的长度相同(在您的案例中为{1,2})?@tarashypka如果我理解正确,“value_a”值的长度与我的示例中的第一个元素的长度不同(为了便于查看,我截断了数据帧…抱歉…)ID值_a''01[[1,20.1],[2,20.2],[3,20.3],等等]''17[[1,30.1],[2,30.2],[3,30.8],等等]“@tarashypka但是在“Value_a”列中,该列中的所有单元格都具有相同的列表长度。
[[1,20.1],[2,20.2],[3,20.3],诸如此类]
始终与
[[1,30.1],[2,30.2],[3,30.8]诸如此类]
具有相同的第一个元素(在本例中为1,2,3)?因此:1。两个列表将始终具有相同的长度;2.第一个元素可能是5,7,17。哦,这很聪明。。。我没有想到使用列表/字典理解。。。!!非常感谢,这与实际df配合得非常好:)
>> x = pd.DataFrame({'ID': [1, 7],
>>                   'Values_a': [ [[1, 20.1], [2, 20.2]], 
>>                                 [[1, 30.1], [2, 30.2]] ] });
>> data = { ID: [v[1] for v in x.loc[x['ID'] == ID, 'Values_a'].values[0]]
>>          for ID in x['ID'] }
>> index = [v[0] for v in x['Values_a'].iloc[0]]
>> y = pd.DataFrame(data, index=index)
      1     7
1  20.1  30.1
2  20.2  30.2