gpt4 book ai didi

python - Pandas:将列表列表转换为多列

转载 作者:行者123 更新时间:2023-12-01 02:47:45 25 4
gpt4 key购买 nike

我是 python 和 pandas 的新手,我想将列表列表(其中包含我从一堆文件中提取的信息)转换为单独的列。我在 stackoverflow 上检查了很多帖子,但到目前为止还没有发现任何对我有用的东西。但是,如果您遇到类似的内容,请在评论中发布链接。

<小时/>

我有一个像这样的数据框(一个代表性的例子):

df:
ID Values_a

0 1 [[1,20.1],[2,20.2]]

1 7 [[1,30.1],[2,30.2]]

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

我想将 df 转换为这样的数据框:

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

1 20.1 30.1

2 20.2 30.2

其中将包含三列:

  • 第一列 (Label) 包含列表中的第一个数字(因此在本例中,我们有整数 12 )。
  • 第二列 (1) 将第一个 ID 号作为列标题,并包含每个列表的第二个值 (20.120.2) >).
  • 第三列包含 ID 号 7 的相同信息。
<小时/>

首先,我使用 apply.(pd.Series) 来拆分列表列表以获得类似这样的内容(我称之为 df2):

df2:
ID 0 1

0 1 [1,20.1] [2,20.2]

1 7 [1,30.1] [2,30.2]

不过,我可以使用相同的技巧(apply.(pd.Series))再次拆分列以获得如下内容:

   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 来检查输出时):

      0     1
0 1.0 20.1
1 2.0 20.2
0 1
0 1.0 30.1
1 2.0 30.2

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

如果我调用df3,这就是我得到的:

      0     1
0 1.0 30.1
1 2.0 30.2

看起来我正在覆盖 df3 而不是将新数据附加到 df3

所以:

  • 如何解决这个问题? (也许创建一个新的数据框并将分割列附加到新的数据框?)

  • 如何将 df3 转换为我想要的 DataFrame?我有一种感觉,我需要 reshape 我的数据框,但我不知道该怎么做。

任何意见和建议将不胜感激..!!

最佳答案

根据 Values_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 存在一种更简单、更优雅的解决方案。

关于python - Pandas:将列表列表转换为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45107523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com