Câu hỏi ban đầu đề cập đến một trường hợp sử dụng hẹp cụ thể. Đối với những người cần câu trả lời chung chung, đây là một số ví dụ:
Tạo một cột mới bằng cách sử dụng dữ liệu từ các cột khác
Với khung dữ liệu bên dưới:
import pandas as pd
import numpy as np
df = pd.DataFrame([['dog', 'hound', 5],
['cat', 'ragdoll', 1]],
columns=['animal', 'type', 'age'])
In[1]:
Out[1]:
animal type age
----------------------
0 dog hound 5
1 cat ragdoll 1
Dưới đây, chúng tôi sẽ thêm một description
cột mới dưới dạng nối các cột khác bằng cách sử dụng +
thao tác được ghi đè cho chuỗi. Định dạng chuỗi lạ mắt, f-string, v.v. sẽ không hoạt động ở đây vì +
áp dụng cho các giá trị vô hướng và không phải giá trị 'nguyên thủy':
df['description'] = 'A ' + df.age.astype(str) + ' years old ' \
+ df.type + ' ' + df.animal
In [2]: df
Out[2]:
animal type age description
-------------------------------------------------
0 dog hound 5 A 5 years old hound dog
1 cat ragdoll 1 A 1 years old ragdoll cat
Chúng tôi nhận được 1 years
cho con mèo (thay vì 1 year
) mà chúng tôi sẽ sửa chữa bên dưới bằng cách sử dụng các điều kiện.
Sửa đổi một cột hiện có với các điều kiện
Ở đây chúng tôi sẽ thay thế animal
cột gốc bằng các giá trị từ các cột khác và sử dụng np.where
để đặt một chuỗi con có điều kiện dựa trên giá trị của age
:
# append 's' to 'age' if it's greater than 1
df.animal = df.animal + ", " + df.type + ", " + \
df.age.astype(str) + " year" + np.where(df.age > 1, 's', '')
In [3]: df
Out[3]:
animal type age
-------------------------------------
0 dog, hound, 5 years hound 5
1 cat, ragdoll, 1 year ragdoll 1
Sửa đổi nhiều cột với điều kiện
Một cách tiếp cận linh hoạt hơn là gọi .apply()
trên toàn bộ khung dữ liệu thay vì trên một cột duy nhất:
def transform_row(r):
r.animal = 'wild ' + r.type
r.type = r.animal + ' creature'
r.age = "{} year{}".format(r.age, r.age > 1 and 's' or '')
return r
df.apply(transform_row, axis=1)
In[4]:
Out[4]:
animal type age
----------------------------------------
0 wild hound dog creature 5 years
1 wild ragdoll cat creature 1 year
Trong đoạn mã trên, transform_row(r)
hàm lấy một Series
đối tượng đại diện cho một hàng nhất định (được biểu thị bằng axis=1
, giá trị mặc định của axis=0
sẽ cung cấp một Series
đối tượng cho mỗi cột). Điều này đơn giản hóa quá trình xử lý vì chúng tôi có thể truy cập các giá trị 'nguyên thủy' thực tế trong hàng bằng cách sử dụng tên cột và hiển thị các ô khác trong hàng / cột nhất định.
df.loc[df.ID == 103, ['FirstName', 'LastName']] = 'Matt', 'Jones'