Tôi đang cố gắng tìm ra cách áp dụng hàm lambda cho nhiều khung dữ liệu cùng một lúc, mà không cần hợp nhất các khung dữ liệu với nhau. Tôi đang làm việc với các tập dữ liệu lớn (> 60MM hồ sơ) và tôi cần phải cẩn thận hơn với quản lý bộ nhớ.Pandas: Áp dụng Lambda vào nhiều khung dữ liệu
Mong muốn của tôi là có cách áp dụng lambda cho các khung dữ liệu bên dưới để tôi có thể tránh chi phí ghép chúng lại với nhau trước, sau đó thả dataframe trung gian đó khỏi bộ nhớ trước khi chuyển sang bước tiếp theo quá trình.
Tôi có kinh nghiệm né tránh vấn đề bộ nhớ bằng cách sử dụng các khung dữ liệu dựa trên HDF5, nhưng tôi muốn thử khám phá điều gì đó khác trước tiên.
Tôi đã cung cấp một vấn đề đồ chơi để giúp chứng minh những gì tôi đang nói đến.
import numpy as np
import pandas as pd
# Here's an arbitrary function to use with lambda
def someFunction(input1, input2, input3, input4):
theSum = input1 + input2
theAverage = (input1 + input2 + input3 + input4)/4
theProduct = input2 * input3 * input4
return pd.Series({'Sum' : theSum, 'Average' : theAverage, 'Product' : theProduct})
# Cook up some dummy dataframes
df1 = pd.DataFrame(np.random.randn(6,2),columns=list('AB'))
df2 = pd.DataFrame(np.random.randn(6,1),columns=list('C'))
df3 = pd.DataFrame(np.random.randn(6,1),columns=list('D'))
# Currently, I merge the dataframes together and then apply the lambda function
dfConsolodated = pd.concat([df1, df2, df3], axis=1)
# This works just fine, but merging the dataframes seems like an extra step
dfResults = dfConsolodated.apply(lambda x: someFunction(x['A'], x['B'], x['C'], x['D']), axis = 1)
# I want to avoid the concat completely in order to be more efficient with memory. I am hoping for something like this:
# I am COMPLETELY making this syntax up for conceptual purposes, my apologies.
dfResultsWithoutConcat = [df1, df2, df3].apply(lambda x: someFunction(df1['A'], df1['B'], df2['C'], df3['D']), axis = 1)
rất khó để hiểu nếu điều này là giá trị trả lời như vấn đề hiện tại của bạn có thể được giải quyết mà không áp dụng lambda và concatenating, bạn có thể giải thích những gì bạn đang thực sự ** ** cố gắng để đạt – EdChum
Trong mã ví dụ của tôi, tôi bắt đầu với ba dataframes [df1, df2, df3]. Sau đó, tôi cần phải tạo một khung dữ liệu trung gian được gọi là dfConsolodated, chỉ đơn giản là ba khung dữ liệu bên dưới được kết hợp với nhau. Điều này là tốt với vấn đề đồ chơi, nhưng khi tôi đang hoạt động trên> 60 triệu bản ghi trên mỗi khung dữ liệu, tôi có thể làm cho bộ nhớ nhanh chóng tăng lên nhanh chóng với bảng dfConsolodated. Mục tiêu thực sự, là bảo tồn tài nguyên hệ thống bằng cách tránh concat ở nơi đầu tiên. – jtrowbridge
Tất cả các Khung dữ liệu có cùng hình dạng không? – Alexander