如何在熊猫中拆分列?

时间:2020-08-03 13:14:37

标签: python pandas

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

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:“系列”对象没有属性“拆分”

能否请您解释一下这两种情况之间的区别?

谢谢

2 个答案:

答案 0 :(得分:2)

检查两个数据框的列类型

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')

答案 1 :(得分:0)

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

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)