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?

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.


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


3

Ganti semua koma dengan garis bawah di nama kolom

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

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)

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


Ini berhasil untuk kebutuhan saya. Terima kasih.
FMFF
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.