Mam dataframe i wartość wewnątrz kolumny znajdują się na liście. Muszę zastąpić niewiele wartości, tworzą listę.

Chcę zastąpić "", z ";" i nie chcę wsporników "[]" Chcę ich w sznurku

Przykładowe dane w Dataframe:

[Yuengert Andrew M.]
[Chen Tianxu, Tribbitt Mark A., Yang Yi, Li Xi]
[Wright Chadwick L., Niederkohr Ryan D., Knopp]

Oczekiwany wynik :

Yuengert Andrew M.
Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
Wright Chadwick L.; Niederkohr Ryan D.; Knopp
1
venkatesh_Babu 26 czerwiec 2017, 08:11

4 odpowiedzi

Najlepsza odpowiedź

Możesz użyć join, jeśli wartości są lists:

df = pd.DataFrame({'col':[['Yuengert Andrew M.'], 
                          ['Chen Tianxu', 'Tribbitt Mark A.', 'Yang Yi', 'Li Xi'],
                          ['Wright Chadwick L.', 'Niederkohr Ryan D.', 'Knopp']]})
print (df)
                                               col
0                             [Yuengert Andrew M.]
1  [Chen Tianxu, Tribbitt Mark A., Yang Yi, Li Xi]
2  [Wright Chadwick L., Niederkohr Ryan D., Knopp]


print (type(df.loc[0, 'col']))
<class 'list'>

df['col'] = df['col'].apply('; '.join)
print (df)
                                             col
0                             Yuengert Andrew M.
1  Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2  Wright Chadwick L.; Niederkohr Ryan D.; Knopp

Inne rozwiązanie:

df['col'] = ['; '.join(x) for x in df['col']]
print (df)
                                             col
0                             Yuengert Andrew M.
1  Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2  Wright Chadwick L.; Niederkohr Ryan D.; Knopp

Ale jeśli strings Series.replace {x2}} Mecz Start ciąg i $ Koniec ciągu:

df = pd.DataFrame({'col': ['[Yuengert Andrew M.]', 
                           '[Chen Tianxu, Tribbitt Mark A., Yang Yi, Li Xi]',
                           '[Wright Chadwick L., Niederkohr Ryan D., Knopp]']})
print (df)
                                               col
0                             [Yuengert Andrew M.]
1  [Chen Tianxu, Tribbitt Mark A., Yang Yi, Li Xi]
2  [Wright Chadwick L., Niederkohr Ryan D., Knopp]

print (type(df.loc[0, 'col']))
<class 'str'>

df['col']  = df['col'].replace(['^\[|\]$', ','],['', ';'],regex=True)
print (df)
                                             col
0                             Yuengert Andrew M.
1  Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2  Wright Chadwick L.; Niederkohr Ryan D.; Knopp

Inne rozwiązanie z str.strip i str.replace :

df['col']  = df['col'].str.strip('[]').str.replace(',', ';')
print (df)
                                             col
0                             Yuengert Andrew M.
1  Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2  Wright Chadwick L.; Niederkohr Ryan D.; Knopp
2
jezrael 26 czerwiec 2017, 05:22

Jeśli masz dane jak poniżej, możesz przetworzyć go za pomocą prostego dołączania.

col = {'col':[['Yuengert Andrew M.'], 
                          ['Chen Tianxu', 'Tribbitt Mark A.', 'Yang Yi', 'Li Xi'],
                          ['Wright Chadwick L.', 'Niederkohr Ryan D.', 'Knopp']]}
y = ' '.join(['; '.join(i) for i in col['col']])
print (y)

Wynik będzie:

'Yuengert Andrew M. Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi Wright Chadwick L.; Niederkohr Ryan D.; Knopp'
0
Pooja 26 czerwiec 2017, 05:54

Jeśli twoja kolumna jest w formacie surowym zamiast listy, możesz zrobić:

df.col.replace('\[|\]','',regex=True).str.split(',').str.join(';')
Out[48]: 
0                               Yuengert Andrew M.
1    Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2    Wright Chadwick L.; Niederkohr Ryan D.; Knopp
Name: col, dtype: object
0
Allen 26 czerwiec 2017, 05:15

Jeśli wartości są w rzeczywistości listy, użyj pandas.Series.str.join

df.col.str.join('; ')

0                               Yuengert Andrew M.
1    Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2    Wright Chadwick L.; Niederkohr Ryan D.; Knopp
Name: col, dtype: object
1
piRSquared 26 czerwiec 2017, 07:15