Pandas veri çerçevesinin bir sütunundaki metin nasıl değiştirilir?


103

Veri çerçevemde şöyle bir sütun var:

range
"(2,30)"
"(50,290)"
"(400,1000)"
... 

ve ,virgül yerine -tire koymak istiyorum . Şu anda bu yöntemi kullanıyorum ancak hiçbir şey değişmedi.

org_info_exc['range'].replace(',', '-', inplace=True)

Biri yardım edebilir mi?

Yanıtlar:


215

Vektörleştirilmiş stryöntemi kullanın replace:

In [30]:

df['range'] = df['range'].str.replace(',','-')
df
Out[30]:
      range
0    (2-30)
1  (50-290)

DÜZENLE

Yani denediğinize ve neden işe yaramadığına bakarsak:

df['range'].replace(',','-',inplace=True)

dan docs bu azalan bakın:

str veya regex: str: string tam olarak eşleşen to_replace ile değiştirilecek

Dolayısıyla, str değerleri eşleşmediğinden, değiştirme gerçekleşmez, aşağıdakilerle karşılaştırın:

In [43]:

df = pd.DataFrame({'range':['(2,30)',',']})
df['range'].replace(',','-', inplace=True)
df['range']
Out[43]:
0    (2,30)
1         -
Name: range, dtype: object

burada ikinci satırda tam bir eşleşme elde ederiz ve değiştirme gerçekleşir.


40

Google aramasından buraya tüm sütunlarda nasıl bir dize değişiminin yapılacağına dair gelen herkes için (örneğin, OP'nin 'aralık' sütunu gibi birden fazla sütun varsa): Pandaların replacebir veri çerçevesi nesnesinde kullanılabilen yerleşik bir yöntemi vardır.

df.replace(',', '-', regex=True)

Kaynak: Dokümanlar


2

Sütun adlarında tüm virgülleri alt çizgi ile değiştirin

data.columns= data.columns.str.replace(' ','_',regex=True)

2

Ek olarak, bir sütundaki birden fazla karakteri değiştirmek isteyenler için bunu normal ifadeler kullanarak yapabilirsiniz:

import re
chars_to_remove = ['.', '-', '(', ')', '']
regular_expression = '[' + re.escape (''. join (chars_to_remove)) + ']'

df['string_col'].str.replace(regular_expression, '', regex=True)

0

Yalnızca belirli bir sütundaki karakterleri değiştirmeniz gerekiyorsa, bir şekilde regex = True ve yerinde = True hepsi başarısız oldu, bu yolun işe yarayacağını düşünüyorum:

data["column_name"] = data["column_name"].apply(lambda x: x.replace("characters_need_to_replace", "new_characters"))

lambda daha çok bu senaryoda for döngüsü gibi çalışan bir işlevdir. Burada x, geçerli sütundaki girişlerin her birini temsil eder.

Yapmanız gereken tek şey "sütun_adı", "karakterler_need_to_replace" ve "yeni_karakterler" i değiştirmektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.