2014-09-06 53 views
26

Yaklaşık 20 sütun içeren bir panda veri karteşi var.Bir dizenin tüm oluşumlarını pandalar veri çerçevesine (Python) değiştirin

elle tüm sütun isimleri yazarak bir dize (burada satır) tüm tekrarlarını değiştirmek mümkündür:

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>") 

Bu maalesef çalışmıyor:

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

orada başka mı , daha zarif bir çözüm mü? Örneğin

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

:

cevap

56

Sen replace kullanabilir ve bulmak için dizeleri geçebilir/olarak sözlük tuşları/öğeleri yerine

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

yerine karakteri belirtmek için .join '' düzenleyebilir! Pandalar versiyonu '0.15.1', ​​python 2.7.9, Ubuntu 14.04. –

+1

'Python 2.7.9 | Anaconda 2.1.0 (64-bit) | (varsayılan, Mar 9 2015, 16:20:48) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] linux2 üzerinde Türü "yardım", "telif hakkı", "krediler" veya "lisans" için daha fazla bilgi. Anaconda, Continuum Analytics tarafından size getirilmiştir. Lütfen dikkat: http://continuum.io/thanks ve https://binstar.org >>> pd'leri içe aktarın 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

Bunu işaretlediğiniz için teşekkür ederiz, @YichuanWang. –

9

Pandalar belirsizliği zaman kaçınmak için elinden API değiştirmek var gibi görünüyor regex kullanımı. Şimdi kullanmalıdır: Örneğin

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

:

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

Ayrıca, bir kopyasını oluşturmaktan kaçınmak için "inplace = True" değerini de kullanabilirsiniz - http: //pandas.pydata. org/panda-docs/sabit/üretilen/pandas.DataFrame.replace.html –

0

Bu, tüm yeni satır ve gereksiz boşluklar kaldıracaktır. Bu benim için çalışmıyor

df['columnname'] = [''.join(c.split()) for c in df['columnname'].astype(str)] 
İlgili konular