2014-09-06 19 views
26

Mam pandasową ramkę danych o około 20 kolumnach.Zamień wszystkie wystąpienia ciągu znaków w ramce danych pandy (Python).

Jest możliwe, aby zastąpić wszystkie wystąpienia ciągu znaków (tutaj nowa linia) przez ręczne pisanie wszystkie nazwy kolumn:

df['columnname1'] = df['columnname1'].str.replace("\n","<br>") 
df['columnname2'] = df['columnname2'].str.replace("\n","<br>") 
df['columnname3'] = df['columnname3'].str.replace("\n","<br>") 
... 
df['columnname20'] = df['columnname20'].str.replace("\n","<br>") 

To niestety nie działa:

df = df.replace("\n","<br>") 

Czy istnieje jakakolwiek inna , bardziej eleganckie rozwiązanie?

Odpowiedz

56

Można użyć replace i przechodzą ciągi znaleźć/zastąpić słownika kluczy/pozycje:

df.replace({'\n': '<br>'}, regex=True) 

Na przykład:

>>> df = pd.DataFrame({'a': ['1\n', '2\n', '3'], 'b': ['4\n', '5', '6\n']}) 
>>> df 
    a b 
0 1\n 4\n 
1 2\n 5 
2 3 6\n 

>>> df.replace({'\n': '<br>'}, regex=True) 
    a  b 
0 1<br> 4<br> 
1 2<br> 5 
2 3  6<br> 
+0

to nie działa dla mnie! Wersja Panda "0.15.1", python 2.7.9, Ubuntu 14.04. –

+1

'Python 2.7.9 | Anaconda 2.1.0 (64-bit) | (domyślnie, 9 marca 2015, 16:20:48) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] na linux2 Wpisz "help", "copyright", "credits" lub "license" for więcej informacji. Anaconda jest dostarczana przez Continuum Analytics. Proszę sprawdzić: http://continuum.io/thanks i https://binstar.org >>> importować pandy jako pd >>> df = pd.DataFrame ({'a': ['1 \ n ',' 2 \ n ',' 3 '],' b ': [' 4 \ n ',' 5 ',' 6 \ n ']}) >>> df ab 0 1 \ n 4 \ n 1 2 \ n 5 2 3 6 \ n >>> df.replace ({ '\ n': '
'}) AB 0 1 \ n 4 \ n 1 2 \ n 5 2 3 6 \ n >>> ' –

+0

Dzięki za wskazanie tego, @ YichuanWang. –

9

Wydaje Pandy ma zmienić jego API, aby uniknąć dwuznaczności podczas obsługa regex. Teraz należy użyć:

df.replace({'\n': '<br>'}, regex=True) 

Na przykład:

>>> df = pd.DataFrame({'a': ['1\n', '2\n', '3'], 'b': ['4\n', '5', '6\n']}) 
>>> df 
    a b 
0 1\n 4\n 
1 2\n 5 
2 3 6\n 

>>> df.replace({'\n': '<br>'}, regex=True) 
    a  b 
0 1<br> 4<br> 
1 2<br> 5 
2 3  6<br> 
+5

Możesz także użyć "inplace = True", aby uniknąć tworzenia kopii - http: //pandas.pydata. org/pandas-docs/stable/generated/pandas.DataFrame.replace.html –

0

To usunie wszystkie znaki nowej linii i unecessary spacji. Można edytować „” .join określić charakter zamiennych

df['columnname'] = [''.join(c.split()) for c in df['columnname'].astype(str)] 
Powiązane problemy