จะแทนที่ข้อความในคอลัมน์ของ Pandas dataframe ได้อย่างไร?


109

ฉันมีคอลัมน์ในดาต้าเฟรมของฉันดังนี้:

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

และฉันต้องการแทนที่,เครื่องหมายจุลภาคด้วย-เส้นประ ฉันกำลังใช้วิธีนี้ แต่ไม่มีอะไรเปลี่ยนแปลง

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

ใครสามารถช่วย?

คำตอบ:


231

ใช้strวิธีvectorised replace:

In [30]:

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

แก้ไข

ดังนั้นหากเราดูสิ่งที่คุณลองและเหตุใดจึงไม่ได้ผล:

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

จากเอกสารเราจะเห็นคำอธิบายนี้:

str หรือ regex: str: string ตรงกับ to_replace ทุกประการจะถูกแทนที่ด้วยค่า

ดังนั้นเนื่องจากค่า str ไม่ตรงกันจึงไม่มีการแทนที่เกิดขึ้นเปรียบเทียบกับสิ่งต่อไปนี้:

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

ที่นี่เราได้การจับคู่แบบตรงทั้งหมดในแถวที่สองและการแทนที่เกิดขึ้น


48

สำหรับใครก็ตามที่มาถึงที่นี่จากการค้นหาของ Google เกี่ยวกับวิธีการแทนที่สตริงในคอลัมน์ทั้งหมด (ตัวอย่างเช่นหากคอลัมน์มีหลายคอลัมน์เช่นคอลัมน์ 'ช่วง' ของ OP): Pandas มีreplaceวิธีการในตัวที่พร้อมใช้งานบนวัตถุดาต้าเฟรม

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

ที่มา: Docs


3

แทนที่เครื่องหมายจุลภาคทั้งหมดด้วยเครื่องหมายขีดล่างในชื่อคอลัมน์

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

3

นอกจากนี้สำหรับผู้ที่ต้องการแทนที่อักขระมากกว่าหนึ่งตัวในคอลัมน์คุณสามารถทำได้โดยใช้นิพจน์ทั่วไป:

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

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

1

หากคุณต้องการแทนที่อักขระในคอลัมน์ใดคอลัมน์หนึ่งเท่านั้น regex = True และแทนที่ = True ทั้งหมดล้มเหลวฉันคิดว่าวิธีนี้จะได้ผล:

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

แลมบ์ดาเป็นเหมือนฟังก์ชันที่ทำงานเหมือนลูปในสถานการณ์นี้ x ในที่นี้หมายถึงทุกรายการในคอลัมน์ปัจจุบัน

สิ่งเดียวที่คุณต้องทำคือเปลี่ยน "column_name", "characters_need_to_replace" และ "new_characters"


สิ่งนี้ใช้ได้กับความต้องการของฉัน ขอขอบคุณ.
FMFF
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.