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 replacephươ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ó replacephươ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 replacephương thức:
inplace : boolean, mặc định
FalseNế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
)
replacekhô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.replacephươ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'
},
...
})