2017-06-26 6 views
1

Ich habe einen Datenrahmen und der Wert innerhalb der Spalte sind in der Liste. Ich muss einige Werte aus der Liste ersetzen.finden und ersetzen Wert innerhalb der Liste innerhalb des Datenrahmens

Ich möchte ersetzen "," mit ";" und i dont die Klammern wollen "[]" Ich möchte, dass sie in einem String

Probe Daten in Datenrahmen:

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

erwartet heraus gesetzt:

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

Antwort

2

Sie können join verwenden, wenn Werte 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 

Eine andere Lösung:

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 

Aber wenn stringsSeries.replace^ Spiel Beginn der Zeichenfolge und $ Ende string:

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 

Eine andere Lösung mit str.strip und 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 
0

Wenn Ihre Spalte in Raw-String-Format anstelle von lis t, Sie können tun:

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

Wenn Sie Daten wie unten haben, können Sie es mit einfachen Join verarbeiten.

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) 

Ausgang wird sein:

'Yuengert Andrew M. Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi Wright Chadwick L.; Niederkohr Ryan D.; Knopp' 
1

Wenn die Werte in der Tat Listen sind dann pandas.Series.str.join verwenden

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 
Verwandte Themen