Pandas DataFrame 存储格式性能对比!

本文详细介绍了如何使用Pandas创建包含不同类型数据的测试DataFrame,并测试了CSV、Pickle、Parquet、ORC、Feather和HDF5等格式的写入、读取速度以及文件大小,分析了各种格式的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建测试Dataframe

首先创建一个包含不同类型数据的测试Pandas Dataframe。



 import pandas as pd  
 import random  
 import string  
 import numpy as np  
   
 # Config DF  
 df\_length= 10\*\*6  
 start\_date= '2023-01-01'  
 all\_string= list(string.ascii\_letters + string.digits)  
 string\_length= 10\*\*1  
 min\_number= 0  
 max\_number= 10\*\*3  
   
 # Create Columns  
 date\_col= pd.date\_range(start= start\_date, periods= df\_length, freq= 'H')  
 str\_col= \[''.join(np.random.choice(all\_string, string\_length)) for i in range(df\_length)\]  
 float\_col= np.random.rand(df\_length)  
 int\_col= np.random.randint(min\_number,max\_number, size = df\_length)  
   
 # Create DataFrame  
 df= pd.DataFrame({'date\_col' : date\_col,  
                  'str\_col' : str\_col,  
                  'float\_col' : float\_col,  
                  'int\_col' : int\_col})  
 df.info()  
 df.head()


以不同的格式存储

接下来创建测试函数,以不同的格式进行读写。



 import time  
 import os  
   
 def check\_read\_write\_size(df, file\_name, compression= None) :  
    format= file\_name.split('.')\[\-1\]  
    # Write  
    begin= time.time()  
    if file\_name.endswith('.csv') : df.to\_csv(file\_name, index= False, compression= compression)  
    elif file\_name.endswith('.parquet') : df.to\_parquet(file\_name, compression= compression)  
    elif file\_name.endswith('.pickle') : df.to\_pickle(file\_name, compression= compression)  
    elif file\_name.endswith('.orc') : df.to\_orc(file\_name)  
    elif file\_name.endswith('.feather') : df.to\_feather(file\_name)  
    elif file\_name.endswith('.h5') : df.to\_hdf(file\_name, key= 'df')  
    write\_time= time.time() - begin  
    # Read  
    begin= time.time()  
    if file\_name.endswith('.csv') : pd.read\_csv(file\_name, compression= compression)  
    elif file\_name.endswith('.parquet') : pd.read\_parquet(file\_name)  
    elif file\_name.endswith('.pickle') : pd.read\_pickle(file\_name, compression= compression)  
    elif file\_name.endswith('.orc') : pd.read\_orc(file\_name)  
    elif file\_name.endswith('.h5') : pd.read\_hdf(file\_name)  
    read\_time= time.time() - begin  
    # File Size  
    file\_size\_mb = os.path.getsize(file\_name) / (1024 \* 1024)  
    return \[format, compression, read\_time, write\_time, file\_size\_mb\]


然后运行该函数并将结果存储在另一个Pandas Dataframe中。



 test\_case= \[  
            \['df.csv','infer'\],  
            \['df.csv','gzip'\],  
            \['df.pickle','infer'\],  
            \['df.pickle','gzip'\],  
            \['df.parquet','snappy'\],  
            \['df.parquet','gzip'\],  
            \['df.orc','default'\],  
            \['df.feather','default'\],  
            \['df.h5','default'\],  
            \]  
   
 result= \[\]  
 for i in test\_case :  
    result.append(check\_read\_write\_size(df, i\[0\], compression= i\[1\]))  
   
 result\_df= pd.DataFrame(result, columns= \['format','compression','read\_time','write\_time','file\_size'\])  
 result\_df


测试结果

下面的图表和表格是测试的结果。

我们对测试的结果做一个简单的分析:

CSV

  • 未压缩文件的大小最大

  • 压缩后的尺寸很小,但不是最小的

  • CSV的读取速度和写入速度是最慢的

Pickle

  • 表现得很平均

  • 但压缩写入速度是最慢的

Feather(再见 CSV,速度提升 150 倍!

  • 最快的读写速度,文件的大小也是中等,非常的平均

ORC

  • 所有格式中最小的

  • 读写速度非常快,几乎是最快的

Parquet

  • 总的来说,快速并且非常小,但是并不是最快也不是最小的

以上就是“Pandas DataFrame 存储格式性能对比!”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

<think>好的,用户让我介绍一下pandas里的pd.DataFrame函数。我需要先回想一下这个函数的基本用法和常见参数。用户之前问过make_circles(),现在转向pandas,可能是在学习数据处理,所以需要详细但清晰的解释。 首先,DataFramepandas的核心数据结构,类似于表格。应该从创建DataFrame的不同方法入手,比如从字典、列表、NumPy数组等。需要说明参数,比如data、index、columns这些基本参数,可能还要提到dtype和copy。 然后,用户可能需要示例来理解如何实际操作。比如用字典创建,其中键是列名,值是数据。或者从列表创建,指定列名和索引。此外,高级用法比如添加缺失值、时间索引、从文件导入这些实用场景也需要提及。 还要注意常见操作,比如数据选取、类型转换、合并等,这些能帮助用户了解DataFrame的实用性。用户可能想用DataFrame做数据分析或清洗,所以应用场景部分要覆盖数据处理的基本步骤。 需要检查是否有需要强调的注意事项,比如数据对齐特性,或者性能方面的考虑。比如,使用NumPy数组时是否共享内存,或者如何高效处理大数据。 最后,确保语言通俗易懂,结构清晰,分点说明,方便用户理解。可能用户是初学者,所以避免太专业的术语,用例子来辅助说明。同时,结合之前回答的格式,保持一致性,比如参数表格、示例代码等,让用户更容易跟随。</think>`pd.DataFrame` 是 Python 数据分析库 **Pandas** 中最核心的数据结构函数,用于创建二维表格型数据结构(类似 Excel 表格),支持行列索引、混合数据类型和高效数据操作。 --- ### 核心特性 | 特性 | 描述 | |------|------| | **二维结构** | 由行(index)和列(columns)组成的表格 | | **异构数据** | 不同列可以存储不同类型的数据(整数、字符串、日期等) | | **灵活索引** | 支持自定义行标签和列名 | | **数据对齐** | 自动根据行列标签对齐数据 | | **高效操作** | 内置丰富的数据处理函数(筛选、聚合、合并等) | --- ### 基本语法 ```python import pandas as pd df = pd.DataFrame( data=None, # 数据源(字典/列表/数组等) index=None, # 行索引 columns=None, # 列名 dtype=None, # 强制数据类型 copy=False # 是否复制输入数据 ) ``` --- ### 6种常见创建方式 #### 1. 从字典创建(键为列名) ```python data = {'姓名': ['张三', '李四', '王五'], '年龄': [25, 32, 28], '城市': ['北京', '上海', '广州']} df = pd.DataFrame(data) ``` #### 2. 从列表创建(需指定列名) ```python data = [['苹果', 5.2], ['香蕉', 3.8], ['橙子', 4.5]] df = pd.DataFrame(data, columns=['商品', '价格']) ``` #### 3. 从NumPy数组创建 ```python import numpy as np arr = np.random.rand(3,4) # 3行4列随机数 df = pd.DataFrame(arr, columns=['A','B','C','D']) ``` #### 4. 带自定义索引 ```python df = pd.DataFrame( {'销售额': [1200, 1500, 900]}, index=['2023-Q1', '2023-Q2', '2023-Q3'] ) ``` #### 5. 从文件导入(补充说明) ```python # 从CSV创建 df = pd.read_csv('data.csv') # 从Excel创建 df = pd.read_excel('data.xlsx') ``` #### 6. 包含缺失值 ```python df = pd.DataFrame({'A': [1, None, 3], 'B': [None, 5, 6]}) ``` --- ### 常用操作示例 #### 数据查看 ```python df.head(3) # 查看前3行 df.tail() # 查看后5行 df.shape # 显示维度(行数, 列数) df.info() # 查看数据类型和内存 ``` #### 数据选取 ```python df['姓名'] # 选择单列 df[['姓名','年龄']] # 选择多列 df.iloc[1:3] # 通过位置选择行 df.loc[df['年龄']>30] # 条件筛选 ``` #### 类型转换 ```python df['价格'] = df['价格'].astype(float) # 转换为浮点数 df['日期'] = pd.to_datetime(df['日期']) # 转换为日期类型 ``` #### 数据统计 ```python df.describe() # 数值列统计摘要 df['年龄'].mean() # 计算平均值 df.groupby('城市').size() # 分组计数 ``` --- ### 应用场景 1. **数据清洗**:处理缺失值、重复值、异常值 2. **数据分析**:统计聚合、数据透视、趋势分析 3. **机器学习**:特征工程、数据预处理 4. **数据可视化**:配合Matplotlib/Seaborn绘制图表 5. **数据库交互**:与SQL数据库进行数据读写 --- ### 注意事项 - **内存管理**:处理大型数据时建议使用 `dtype` 参数指定数据类型(如 `np.int32`) - **索引对齐**:进行数据运算时,Pandas会按标签自动对齐 - **副本机制**:修改数据时注意 `inplace` 参数的使用(默认为 `False` 生成副本) - **性能优化**:对超大数据集可考虑使用 `dask` 库替代 --- ### 可视化示例 ```python import matplotlib.pyplot as plt df.plot(kind='bar', x='商品', y='价格') plt.title('商品价格对比') plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值