Bagaimana cara mengganti teks di kolom bingkai data Pandas?

109

Saya memiliki kolom di dataframe saya seperti ini:

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

dan saya ingin mengganti ,koma dengan -tanda hubung. Saat ini saya menggunakan metode ini tetapi tidak ada yang berubah.

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

Ada yang bisa membantu?

UserYmY
sumber

Jawaban:

229

Gunakan strmetode vektorisasi replace:

In [30]:

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

EDIT

Jadi jika kita melihat apa yang Anda coba dan mengapa tidak berhasil:

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

dari dokumen kita melihat desc ini:

str atau regex: str: string yang sama persis dengan to_replace akan diganti dengan nilai

Jadi karena nilai str tidak cocok, tidak terjadi penggantian, bandingkan dengan berikut ini:

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

di sini kita mendapatkan hasil yang sama persis pada baris kedua dan terjadi pergantian.

EdChum
sumber
48

Untuk orang lain yang tiba di sini dari pencarian Google tentang cara melakukan penggantian string pada semua kolom (misalnya, jika ada yang memiliki beberapa kolom seperti kolom 'range' OP): Pandas memiliki replacemetode bawaan yang tersedia pada objek dataframe.

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

Sumber: Docs

kevcisme
sumber
3

Ganti semua koma dengan garis bawah di nama kolom

data.columns= data.columns.str.replace(' ','_',regex=True)
Rameez Ahmad
sumber
3

Selain itu, bagi mereka yang ingin mengganti lebih dari satu karakter dalam kolom, Anda dapat melakukannya menggunakan ekspresi reguler:

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

df['string_col'].str.replace(regular_expression, '', regex=True)
Carlos Dutra
sumber
1

Jika Anda hanya perlu mengganti karakter dalam satu kolom tertentu, entah bagaimana regex = True dan di tempat = True semua gagal, saya rasa cara ini akan berhasil:

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

lambda lebih seperti fungsi yang bekerja seperti loop for dalam skenario ini. x di sini mewakili setiap entri di kolom saat ini.

Satu-satunya hal yang perlu Anda lakukan adalah mengubah "nama_kolom", "karakter_need_to_replace", dan "karakter_baru".

Nancy K
sumber
Ini berhasil untuk kebutuhan saya. Terima kasih.
FMFF