如何在pandas中拆分列?

2024-10-02 00:29:38 发布

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

我有一个关于如何将列元素拆分为多个元素的问题。 如果数据帧看起来像

Src  Dst
A    [A,B]
B    [B,A]
C    [C]
D    [D,E,F]
E    [E,D,F]
F    [F,D,E]
...

此代码

df["Dst"] = df.Dst.apply(lambda x: x[1:-1].split(","))

效果很好

但是,如果我有此数据帧:

   Src          Dst
x.serm.cool    [x.serm.cool, x.creat.cool]
x.creat.cool   [x.creat.cool, x.serm.cool]
sms.sol.tr     [sms.sol.tr]
bbb.asl.gt     [bbb.asl.gt,cdc.fre.gh,str.alert.jf]
cdc.fre.gh     [cdc.fre.gh, bbb.asl.gt,str.alert.jf]
str.alert.jf   [str.alert.jf, bbb.asl.gt, cdc.fre.gh]
    ...

这一点是行不通的。我试过了

df["Dst"]=df["Dst"].apply(lambda x: x.split(','))

但我有一个错误:

AttributeError: 'Series' object has no attribute 'split'

你能解释一下这两种情况有什么不同吗

多谢各位


Tags: gtdfalertghdstsplitaslbbb
2条回答

我假设您的数据帧只有这两列

df["newcol1"]=[x[0] for x in df["Dst"]]

df["newcol2"]=[x[1] for x in df["Dst"]]

但是,如果您希望它在每个列中都有X个列表的数据帧中工作,我相信下面的代码将帮助您解决这个问题

split_df=df['Dst'].apply(lambda x: pd.Series(','.join(x).split(',')))
final_df=pd.concat([split_df,df],axis=1)

检查两个数据帧的列类型

df.Dst.apply(type)

#one of them should be str the 2nd one should be list 

对于第二个,我们只做explode

G = nx.from_pandas_edgelist(df.explode("Dst"), 'Src', 'Dst')

相关问题 更多 >

    热门问题