Как разбить столбцы на pandas? - PullRequest
0 голосов
/ 03 августа 2020

У меня есть один вопрос, как разбить элементы столбцов на множество. Если фрейм данных выглядит как

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: объект «Серия» не имеет атрибута «split»

Может объясните, пожалуйста, в чем разница между двумя корпусами?

Спасибо

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Проверьте тип столбца для обоих фреймов данных

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 голос
/ 03 августа 2020

Я предполагаю, что у вас есть только эти 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...