我对如何将列元素拆分为多个有一个问题。 如果数据框看起来像
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:“系列”对象没有属性“拆分”
能否请您解释一下这两种情况之间的区别?
谢谢
答案 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)