Python 熊猫:将列表列表转换为多列
我不熟悉python和pandas,我想将列表列表(其中包含我从一堆文件中提取的信息)转换为单独的列。我检查了很多关于stackoverflow的帖子,到目前为止还没有找到适合我的。但是,如果你遇到任何类似的情况,请在评论中发布链接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
我有这样一个数据帧(一个代表性示例): 两个列表(
[[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
其中将有三列:
- 第一列(
)包含列表中的第一个数字(因此在本例中,我们有integerLabel
和1
)2
- 第二列(
)的第一个ID号作为列标题,并包含每个列表的第二个值(1
,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