如何在pandas中已创建的数据框中插入列表项列表?

2024-04-29 13:41:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将列表项列表逐行填充到已定义的数据框中。你能帮我怎么做吗

我真的很抱歉我改变了我的要求

例如:

list_item = [['1|x', '2|x', '3|-'],
             ['5|x', '6|-', '7|x'],
             ['9|x', '10|x', '11|-']]

预定义数据帧: df

Name     Code     City  
Shiv     Sh       ALD
Kumar    KR       PJ
Ram      RM       KL
Shank    SK       RM
Jeet     JT       PKG
Atul     AT       FTP
Ganesh   GS       TL
Kishor   KH       KI
Gagan    GN       AK 

最终输出:

df:

Name     Code     City  Num  Expr
Shiv     Sh       ALD   1     x
Kumar    KR       PJ    2     x
Ram      RM       KL    3     -
Shank    SK       RM    5     x
Jeet     JT       PKG   6     -
Atul     AT       FTP   7     x
Ganesh   GS       TL    9     x
Kishor   KH       KI    10    x 
Gagan    GN       AK    11    x

Tags: rmnamecitydf列表shcodeshiv
2条回答

您可以使用np.ravel

df["new"] = np.array(list_item).ravel()

print (df)

     Name Code City new
0    Shiv   Sh  ALD   1
1   Kumar   KR   PJ   2
2     Ram   RM   KL   3
3   Shank   SK   RM   5
4    Jeet   JT  PKG   6
5    Atul   AT  FTP   7
6  Ganesh   GS   TL   9
7  Kishor   KH   KI  10
8   Gagan   GN   AK  11

更新后的问题:

list_item = [['1|x', '2|x', '3|-'],
             ['5|x', '6|-', '7|x'],
             ['9|x', '10|x', '11|-']]
s = pd.Series(np.array(list_item).ravel())
df[['Num', 'Expr']] = s.str.split('|', n=1, expand=True)

df
     Name Code City Num Expr
0    Shiv   Sh  ALD   1    x
1   Kumar   KR   PJ   2    x
2     Ram   RM   KL   3    -
3   Shank   SK   RM   5    x
4    Jeet   JT  PKG   6    -
5    Atul   AT  FTP   7    x
6  Ganesh   GS   TL   9    x
7  Kishor   KH   KI  10    x
8   Gagan   GN   AK  11    -

不太为人所知,但pandas实际上有一个内置的flatten函数,用于展平任何嵌套级别的列表(或任何其他类似容器)flatten返回一个生成器,因此我们需要将其包装在pd.Series()中(将其包装在list()中同样有效-任何将耗尽GerGenerator的操作)以检索所有值

import pandas as pd
from pandas.core.common import flatten

df["new"] = pd.Series(flatten(list_item))

编辑:因为你已经改变了你的问题。只需使用flatten方法即可获得相同的结果: 我们将列表展平,对于每个项目,我们将拆分“|”上的字符串,以创建一个新的列表列表(这次正确组织)。我们可以直接将其分配给新列

df[["Num", "Expr"]] = [item.split("|") for item in flatten(list_item)]

相关问题 更多 >