Tôi có df khung dữ liệu gấu trúc như minh họa bên dưới:
BrandName Specialty
A H
B I
ABC J
D K
AB L
Tôi muốn thay thế 'ABC' và 'AB' trong cột BrandName bằng A. Ai đó có thể giúp gì không?
Tôi có df khung dữ liệu gấu trúc như minh họa bên dưới:
BrandName Specialty
A H
B I
ABC J
D K
AB L
Tôi muốn thay thế 'ABC' và 'AB' trong cột BrandName bằng A. Ai đó có thể giúp gì không?
Câu trả lời:
Cách đơn giản nhất là sử dụng replace
phương thức trên cột. Các đối số là danh sách những thứ bạn muốn thay thế (ở đây ['ABC', 'AB']
) và những thứ bạn muốn thay thế chúng bằng (chuỗi 'A'
trong trường hợp này):
>>> df['BrandName'].replace(['ABC', 'AB'], 'A')
0 A
1 B
2 A
3 D
4 A
Thao tác này tạo một Chuỗi giá trị mới, vì vậy bạn cần gán cột mới này cho đúng tên cột:
df['BrandName'] = df['BrandName'].replace(['ABC', 'AB'], 'A')
inplace=True
, nếu không nó sẽ không thay đổi.
DataFrame
đối tượng có replace
phương thức mạnh mẽ và linh hoạt :
DataFrame.replace(
to_replace=None,
value=None,
inplace=False,
limit=None,
regex=False,
method='pad',
axis=None)
Lưu ý, nếu bạn cần thay đổi tại chỗ, hãy sử dụng inplace
đối số boolean cho replace
phương thức:
inplace : boolean, mặc định
False
NếuTrue
, tại chỗ. Lưu ý: điều này sẽ sửa đổi bất kỳ dạng xem nào khác trên đối tượng này (ví dụ: một cột tạo thành DataFrame). Trả lại người gọi nếu đây làTrue
.
df['BrandName'].replace(
to_replace=['ABC', 'AB'],
value='A',
inplace=True
)
replace
không quy mô tốt? Nó dường như làm hỏng máy của tôi khi thay thế ~ 5 triệu hàng số nguyên. Bất kỳ cách nào xung quanh điều này?
Giải pháp này sẽ thay đổi chính khung dữ liệu hiện có:
mydf = pd.DataFrame({"BrandName":["A", "B", "ABC", "D", "AB"], "Speciality":["H", "I", "J", "K", "L"]})
mydf["BrandName"].replace(["ABC", "AB"], "A", inplace=True)
Đã tạo khung Dữ liệu:
import pandas as pd
dk=pd.DataFrame({"BrandName":['A','B','ABC','D','AB'],"Specialty":['H','I','J','K','L']})
Bây giờ sử dụng DataFrame.replace()
chức năng:
dk.BrandName.replace(to_replace=['ABC','AB'],value='A')
Chỉ muốn cho thấy rằng không có sự khác biệt về hiệu suất giữa 2 cách chính để làm điều đó:
df = pd.DataFrame(np.random.randint(0,10,size=(100, 4)), columns=list('ABCD'))
def loc():
df1.loc[df1["A"] == 2] = 5
%timeit loc
19.9 ns ± 0.0873 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
def replace():
df2['A'].replace(
to_replace=2,
value=5,
inplace=True
)
%timeit replace
19.6 ns ± 0.509 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Bạn cũng có thể vượt qua một dict
đến pandas.replace
phương pháp:
data.replace({
'column_name': {
'value_to_replace': 'replace_value_with_this'
}
})
Điều này có lợi thế là bạn có thể thay thế nhiều giá trị trong nhiều cột cùng một lúc, như sau:
data.replace({
'column_name': {
'value_to_replace': 'replace_value_with_this',
'foo': 'bar',
'spam': 'eggs'
},
'other_column_name': {
'other_value_to_replace': 'other_replace_value_with_this'
},
...
})