Hướng dẫn can i pass a dataframe to a function in python? - tôi có thể chuyển một khung dữ liệu tới một hàm trong python không?

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()

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

Chúng ta có thể chuyển DataFrame cho một chức năng không?

Các hàm tùy ý có thể được áp dụng dọc theo các trục của DataFrame hoặc bảng điều khiển bằng phương thức Application (), giống như các phương thức thống kê mô tả, có một đối số trục tùy chọn.Theo mặc định, thao tác thực hiện cột khôn ngoan, lấy mỗi cột làm một mảng giống như một mảng., which, like the descriptive statistics methods, takes an optional axis argument. By default, the operation performs column wise, taking each column as an array-like.

DataFrames có được truyền bởi tham chiếu hoặc giá trị không?

Nhưng đối với tất cả các đối tượng trong Python, khung dữ liệu được truyền đến hàm bằng cách tham chiếu.by reference.

Chúng ta có thể sử dụng DataFrame trong Numpy không?

GANDAS DATAFRAME là một cấu trúc dữ liệu dạng bảng có kích thước hai chiều, có khả năng không đồng nhất với các trục được dán nhãn (hàng và cột).Cấu trúc dữ liệu này có thể được chuyển đổi thành NUMPY ndarray với sự trợ giúp của DataFrame.This data structure can be converted to NumPy ndarray with the help of the DataFrame.

Chúng ta có thể chuyển đổi DataFrame thành Chuỗi trong Python không?

Nếu bạn muốn thay đổi kiểu dữ liệu cho tất cả các cột trong DataFrame thành loại chuỗi, bạn có thể sử dụng các phương thức DF.ApplyMap (Str) hoặc DF.Asype (Str).df. applymap(str) or df. astype(str) methods.