如何使用 Pandas 在 Python 中高效处理大型数据集?

问题描述 投票:0回答:1

我正在使用 Pandas 库在 Python 中处理大型数据集(大约 100 万行),并且在执行过滤和聚合数据等操作时遇到性能问题。

这是我的代码的简化版本:

import pandas as pd

# Load the dataset
df = pd.read_csv('large_dataset.csv')

# Example operation: Filtering and aggregating
result = df[df['column_name'] > threshold_value].groupby('another_column').mean()

我尝试过使用 df.memory_usage(deep=True) 来分析内存使用情况,并使用 pd.read_csv() 和 chunksize 参数来分块加载数据,但我仍然面临性能缓慢的问题。

**使用 Pandas 优化大型数据集的数据处理有哪些最佳实践? ** 任何有关技术、替代库或有助于提高性能的特定功能的建议将不胜感激!

我尝试过的:

内存分析:我使用 df.memory_usage(deep=True) 来了解内存消耗,发现某些列由于其数据类型而使用了大量内存。

  1. 以块的形式加载数据:我尝试使用 pd.read_csv() 的 chunksize 参数以块的形式加载数据集。这使我能够处理数据集的较小部分,但我的过滤和聚合操作仍然很慢。

  2. 数据类型优化:我尝试将某些列的数据类型更改为内存效率更高的类型(例如,将 float64 转换为 float32),这有助于减少内存使用量,但并没有显着提高处理时间。

  3. 我的期望:我期望通过分析内存使用情况和优化数据类型,以及分块加载数据,我会看到过滤和聚合操作的速度显着提高。然而,性能仍然不够理想,尤其是在数据集很大的情况下。

python pandas dataframe performance data-analysis
1个回答
0
投票

了解信息.... 使用纽约市出租车数据的子集 (yellow_tripdata_2009-10)(150 万行)(相反,它已经采用 parquet 格式......因此将其回滚到 csv 以进行本练习,并从 tha 中获取 150 万行)

我没有尝试任何聚合,这只是为了展示一个潜在的替代方案

# Convert CSV to Parquet
timerS=timer()
df = pd.read_csv(csvFile)
timerE=timer()
print( 'csv to df:', timerE - timerS)
timerS=timer()
df.to_parquet(pFile, engine='pyarrow')
timerE=timer()
print( 'df to parquet:', timerE - timerS)

csv to df: 49.38248022104381
df to parquet: 33.50898619799409

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15604551 entries, 0 to 15604550
Data columns (total 19 columns):
 #   Column                 Dtype
---  ------                 -----
 0   Unnamed: 0             int64
 1   vendor_name            object
 2   Trip_Pickup_DateTime   object
 3   Trip_Dropoff_DateTime  object
 4   Passenger_Count        int64
 5   Trip_Distance          float64
 6   Start_Lon              float64
 7   Start_Lat              float64
 8   Rate_Code              float64
 9   store_and_forward      float64
 10  End_Lon                float64
 11  End_Lat                float64
 12  Payment_Type           object
 13  Fare_Amt               float64
 14  surcharge              float64
 15  mta_tax                float64
 16  Tip_Amt                float64
 17  Tolls_Amt              float64
 18  Total_Amt              float64
dtypes: float64(13), int64(2), object(4)
memory usage: 2.2+ GB


#
# file size substantially reduced
#
ll -tralh yellow_tripdata_2009-10.*
-rw-rw-r-- 1 tester tester 198M Oct  1 00:07 yellow_tripdata_2009-10.csv
-rw-rw-r-- 1 tester tester  57M Oct  1 00:44 yellow_tripdata_2009-10.parquet

© www.soinside.com 2019 - 2024. All rights reserved.