Câu trả lời ngắn gọn là, Python luôn luôn có giá trị, nhưng mọi biến Python thực sự là một con trỏ đến một số đối tượng, vì vậy đôi khi nó trông giống như tham chiếu từng lần.
Trong Python, mọi đối tượng đều có thể thay đổi hoặc không thể sửa chữa. ví dụ: danh sách, dicts, mô-đun và khung dữ liệu gấu trúc là có thể thay đổi, và ints, chuỗi và bộ dữ liệu không thể sửa chữa. Các đối tượng có thể thay đổi có thể được thay đổi nội bộ [ví dụ: thêm một phần tử vào danh sách], nhưng các đối tượng không thể biến không thể.
Như tôi đã nói khi bắt đầu, bạn có thể nghĩ về mọi biến Python như một con trỏ đến một đối tượng. Khi bạn chuyển một biến cho một hàm, biến [con trỏ] trong hàm luôn là bản sao của biến [con trỏ] được truyền vào. Vì vậy, nếu bạn gán một cái gì đó mới cho biến nội bộ, tất cả những gì bạn đang làm là thay đổi Biến cục bộ để trỏ đến một đối tượng khác. Điều này không thay đổi [đột biến] đối tượng gốc mà biến chỉ ra, cũng không làm cho biến bên ngoài chỉ vào đối tượng mới. Tại thời điểm này, biến bên ngoài vẫn chỉ vào đối tượng ban đầu, nhưng biến bên trong trỏ đến một đối tượng mới.
Nếu bạn muốn thay đổi đối tượng gốc [chỉ có thể với các loại dữ liệu có thể thay đổi], bạn phải làm một cái gì đó làm thay đổi đối tượng mà không gán một giá trị hoàn toàn mới cho biến cục bộ. Đây là lý do tại sao letgo[]
và
def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
0 để lại mục bên ngoài không thay đổi, nhưng def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
1 làm thay đổi nó.Như @ursan đã chỉ ra, nếu letgo[]
sử dụng một cái gì đó như thế này, thì nó sẽ thay đổi [đột biến] đối tượng ban đầu mà
def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
3 trỏ đến, sẽ thay đổi giá trị được thấy thông qua biến def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
4 toàn cầu:def letgo[df]:
df.drop['b', axis=1, inplace=True]
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
letgo[a] # will alter a
Trong một số trường hợp, bạn hoàn toàn có thể tạo ra biến ban đầu và đổ đầy nó bằng dữ liệu mới, mà không thực sự thực hiện bài tập trực tiếp, ví dụ: Điều này sẽ thay đổi đối tượng ban đầu mà
def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
5 chỉ vào, sẽ thay đổi dữ liệu được thấy khi bạn sử dụng def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
5 sau:def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
Lưu ý rằng tôi không gán một cái gì đó trực tiếp cho
def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
7; Tôi đang gán một cái gì đó cho toàn bộ phạm vi nội bộ là def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
7.Nếu bạn hoàn toàn phải tạo một đối tượng hoàn toàn mới và làm cho nó hiển thị bên ngoài [đôi khi là trường hợp với gấu trúc], bạn có hai tùy chọn. Tùy chọn 'sạch' sẽ chỉ để trả về đối tượng mới, ví dụ:
def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
Một tùy chọn khác là tiếp cận bên ngoài chức năng của bạn và thay đổi trực tiếp một biến toàn cầu. Điều này thay đổi
def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
4 để trỏ đến một đối tượng mới và bất kỳ chức năng nào đề cập đến def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
4 sau đó sẽ thấy đối tượng mới đó:def letgo[]:
global a
a = a.drop['b',axis=1]
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
letgo[] # will alter a!
Thay đổi trực tiếp các biến toàn cầu thường là một ý tưởng tồi, bởi vì bất kỳ ai đọc mã của bạn sẽ gặp khó khăn trong việc tìm ra cách
def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
4 đã thay đổi. . GANDAS DATAFRAME cho phép bạn linh hoạt áp dụng một hàm dọc theo một trục cụ thể của DataFrame. Trong hướng dẫn này, chúng tôi sẽ xem xét cách áp dụng một chức năng cho khung dữ liệu gấu trúc thông qua một số ví dụ.
Hàm DataFrame
def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
2 của Pandas được sử dụng để áp dụng một hàm dọc theo một trục cụ thể của DataFrame. Sau đây là cú pháp:result = df.apply[func, axis=0]
Chúng tôi vượt qua chức năng sẽ được áp dụng và trục dọc theo đó để áp dụng nó làm đối số. Để áp dụng chức năng cho mỗi cột, hãy chuyển
def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
3 hoặc def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
4 cho tham số def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
5 là def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
3 theo mặc định. Và để áp dụng chức năng cho mỗi hàng, hãy chuyển def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
7 hoặc def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
8 cho tham số def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
5. Các ví dụ dưới đây minh họa sự khác biệt.Ví dụ
Hãy cùng xem xét một số trường hợp sử dụng của hàm
def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
2 thông qua các ví dụ.1. Áp dụng chức năng cho từng cột của DataFrame
Hãy nói rằng bạn muốn áp dụng một hàm cho mỗi cột của một khung dữ liệu, nghĩa là dọc theo trục chỉ mục. Chẳng hạn, bạn làm việc với DataFrame có tất cả các cột số và bạn muốn tìm giá trị trung bình cho mỗi cột đó.
import pandas as pd
# create a sample dataframe
df = pd.DataFrame[{
'History': [76, 84, 68, 94],
'Math': [81, 67, 91, 86],
'English': [72, 93, 84, 76]
}]
# print the dataframe
print["The original dataframe:\n"]
print[df]
# function to be applied
def get_mean[scores]:
return sum[scores]/len[scores]
# get the mean score for each subject
result = df.apply[get_mean]
print["\nThe result of applying the function on the dataframe:\n"]
print[result]
Output:
The original dataframe:
History Math English
0 76 81 72
1 84 67 93
2 68 91 84
3 94 86 76
The result of applying the function on the dataframe:
History 80.50
Math 81.25
English 81.25
dtype: float64
Trong ví dụ trên, DataFrame
def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
3 chứa điểm số của học sinh trong ba môn học. Các hàng đại diện cho các sinh viên trong khi các cột đại diện cho các môn học. Ở đây, hàm def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
2 được sử dụng để có được điểm trung bình cho mỗi môn học trên tất cả các sinh viên. Lưu ý rằng, vì hàm def letgo[]:
global a
a = a.drop['b',axis=1]
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
letgo[] # will alter a!
3 được áp dụng cho mỗi cột, chúng tôi không cần phải chuyển rõ ràng def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
3 cho tham số def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
5 vì nó là giá trị mặc định của nó.2. Áp dụng chức năng cho mỗi hàng của DataFrame
Bây giờ, hãy để nói rằng bạn muốn áp dụng một hàm cho mỗi hàng của một khung dữ liệu, nghĩa là, dọc theo trục cột. Chẳng hạn, bạn làm việc với DataFrame có tất cả các hàng số và bạn muốn tìm giá trị trung bình cho mỗi hàng đó.
import pandas as pd
# create a sample dataframe
df = pd.DataFrame[{
'History': [76, 84, 68, 94],
'Math': [81, 67, 91, 86],
'English': [72, 93, 84, 76]
}, index=['Sam', 'Greta', 'Mike', 'Emma']]
# print the dataframe
print["The original dataframe:\n"]
print[df]
# function to be applied
def get_mean[scores]:
return sum[scores]/len[scores]
# get the mean score for each student
result = df.apply[get_mean, axis=1]
print["\nThe result of applying the function on the dataframe:\n"]
print[result]
Output:
The original dataframe:
History Math English
Sam 76 81 72
Greta 84 67 93
Mike 68 91 84
Emma 94 86 76
The result of applying the function on the dataframe:
Sam 76.333333
Greta 81.333333
Mike 81.000000
Emma 85.333333
dtype: float64
Trong ví dụ trên, DataFrame
def letgo3[x]:
x[:] = np.array[[[3,3],[3,3]]]
v = np.empty[[2, 2]]
letgo3[v] # will alter v
3 chứa điểm số của học sinh trong ba môn học. Các hàng đại diện cho các sinh viên trong khi các cột đại diện cho các môn học. Để rõ ràng hơn, chúng tôi đặt cho mỗi hàng tên của học sinh tương ứng. Ở đây, hàm def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
2 được sử dụng để có được điểm trung bình cho mỗi học sinh trên cả ba môn học. Lưu ý rằng, chúng tôi đã phải vượt qua def letgo[]:
global a
a = a.drop['b',axis=1]
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
letgo[] # will alter a!
8 vì chúng tôi muốn chức năng def letgo[]:
global a
a = a.drop['b',axis=1]
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
letgo[] # will alter a!
3 được áp dụng cho mỗi hàng.Để biết thêm về chức năng
def letgo[df]:
df = df.drop['b',axis=1]
return df
a = pd.DataFrame[{'a':[1,2], 'b':[3,4]}]
a = letgo[a]
2, hãy tham khảo tài liệu chính thức của nó.Với điều này, chúng tôi đi đến cuối hướng dẫn này. Các ví dụ và kết quả mã được trình bày trong hướng dẫn này đã được triển khai trong A & NBSP; Jupyter Notebook & NBSP; với hạt nhân Python [phiên bản 3.8.3] có Pandas phiên bản 1.0.5
Thêm về Gấu trúc DataFrames -
- Gấu trúc - sắp xếp một khung dữ liệu
- Thay đổi thứ tự của các cột của Pandas DataFrame
- Gấu trúc DataFrame vào một danh sách trong Python
- Gấu trúc - đếm các giá trị duy nhất trong mỗi cột
- Pandas - Thay thế các giá trị trong khung dữ liệu
- GANDA - DATAFRAME FILLED cho nhiều điều kiện
- Pandas - mẫu ngẫu nhiên của hàng
- Gấu trúc - mẫu ngẫu nhiên của các cột
- Lưu gấu trúc DataFrame vào tệp CSV
- Pandas - Lưu DataFrame vào tệp Excel
- Tạo một khung dữ liệu gấu trúc từ từ điển
- Chuyển đổi DataFrame của Pandas thành một từ điển
- Thả các bản sao từ một khung dữ liệu gấu trúc
- Các khung hình liên kết trong gấu trúc
- Nối các hàng vào một gấu trúc DataFrame
- So sánh hai khung dữ liệu cho sự bình đẳng trong gấu trúc
- Nhận tên cột làm danh sách trong Pandas DataFrame
- Chọn một hoặc nhiều cột trong gấu trúc
- Pandas - Đổi tên tên cột
- Pandas - thả một hoặc nhiều cột từ DataFrame
- Pandas - Lặp lại trên các hàng của DataFrame
- Làm thế nào để đặt lại chỉ mục của một pandas dataframe?
- Đọc các tệp CSV bằng Pandas - với các ví dụ
- Áp dụng một chức năng cho khung dữ liệu gấu trúc
Đăng ký nhận bản tin của chúng tôi để biết thêm hướng dẫn và hướng dẫn thông tin. Chúng tôi không spam và bạn có thể từ chối bất cứ lúc nào.
We do not
spam and you can opt out any time.
Piyush là một nhà khoa học dữ liệu đam mê sử dụng dữ liệu để hiểu mọi thứ tốt hơn và đưa ra quyết định sáng suốt. Trong quá khứ, anh ta làm việc như một nhà khoa học dữ liệu cho ZS và có bằng kỹ sư từ IIT Roorkee. Sở thích của anh ấy bao gồm xem cricket, đọc sách và làm việc trên các dự án phụ.
Xem tất cả các bài viết