Python数学建模-2.5Pandas库介绍

2.5.1Pandas基本操作

Pandas是一个强大的Python数据分析库,它提供了快速、灵活且富有表现力的数据结构,设计初衷是为了处理关系型或标记型数据。Pandas的基本操作涵盖了数据的读取、处理、筛选、排序、分组、合并以及可视化等多个方面。

以下是一些Pandas的基本操作示例:

1.数据读取

Pandas可以方便地读取各种格式的数据文件,如CSV、Excel、SQL数据库等。

import pandas as pd  
  
# 读取CSV文件  
df = pd.read_csv('data.csv')  
  
# 读取Excel文件  
df = pd.read_excel('data.xlsx')

2.数据处理

Pandas提供了丰富的数据处理功能,如缺失值处理、数据类型转换等。

# 处理缺失值,用0填充  
df.fillna(0, inplace=True)  
  
# 转换数据类型  
df['column_name'] = df['column_name'].astype(int)

3.数据筛选

使用布尔索引或条件表达式来筛选数据。

# 筛选某列值大于10的行  
filtered_df = df[df['column_name'] > 10]

4.数据排序

对数据的行或列进行排序。

# 按某列升序排序  
sorted_df = df.sort_values(by='column_name', ascending=True)

5.数据分组

使用groupby方法对数据进行分组,并进行聚合操作。

# 按某列分组并计算每组的平均值  
grouped_df = df.groupby('column_name').mean()

6.数据合并

使用merge或concat方法合并多个DataFrame。

# 合并两个DataFrame  
merged_df = pd.merge(df1, df2, on='key_column')

7.数据可视化

虽然Pandas本身不直接提供数据可视化功能,但它可以与Matplotlib、Seaborn等库结合使用,实现数据的可视化展示。

操作举例:

例1:生成二维数组:

生成服从标准正态分布的24*4随机数矩阵,并保存为DateFrame数据结构。

import pandas as pd
import numpy as np
dates=pd.date_range(start='20191101',end='20191124',freq='D')
a1=pd.DataFrame(np.random.randn(24,4), index=dates, columns=list('ABCD'))
a2=pd.DataFrame(np.random.rand(24,4))

详解:

在这段代码中,你使用了pandasnumpy库来创建两个DataFrame对象。我将逐步解释每一行代码的含义:

  1. import pandas as pd

    • 这行代码导入了pandas库,并给它一个简短的别名pdpandas是一个强大的数据分析库,提供了快速、灵活且富有表现力的数据结构,如Series和DataFrame。
  2. import numpy as np

    • 这行代码导入了numpy库,并给它一个简短的别名npnumpy是Python的一个基础数值计算库,提供了多维数组对象、各种派生对象(如掩码数组和矩阵)以及用于数组快速操作的各种API。
  3. dates=pd.date_range(start='20191101',end='20191124',freq='D')

    • 这行代码使用pandasdate_range函数创建了一个日期范围。这个范围从20191101(2019年11月1日)开始,到20191124(2019年11月24日)结束,并且freq='D'表示每天生成一个日期。生成的日期范围被赋值给变量dates
  4. a1=pd.DataFrame(np.random.randn(24,4), index=dates, columns=list('ABCD'))

    • 这行代码创建了一个名为a1的DataFrame。
    • np.random.randn(24,4)生成一个形状为24行4列的数组,数组中的元素是从标准正态分布(均值为0,标准差为1)中随机抽取的。
    • index=dates将前面生成的日期范围dates设置为DataFrame的索引。
    • columns=list('ABCD')将DataFrame的列名设置为'A', 'B', 'C', 'D'。
  5. a2=pd.DataFrame(np.random.rand(24,4))

    • 这行代码创建了一个名为a2的DataFrame。
    • np.random.rand(24,4)生成一个形状为24行4列的数组,数组中的元素是从[0, 1)区间内均匀分布的随机数中随机抽取的。
    • 默认情况下,DataFrame的索引是整数,从0开始递增,列名则是默认的整数列名(如0, 1, 2, 3)。

所以,你最终得到了两个DataFrame:a1有一个日期范围的索引和'A', 'B', 'C', 'D'的列名,其数据是从标准正态分布中随机抽取的;而a2有一个默认的整数索引和默认的整数列名,其数据是从[0, 1)区间内均匀分布的随机数中随机抽取的。

例2:读写文件:

数据写入文件示例

import pandas as pd
import numpy as np
dates=pd.date_range(start='20191101', end='20191124', freq='D')
a1=pd.DataFrame(np.random.randn(24,4), index=dates, columns=list('ABCD'))
a2=pd.DataFrame(np.random.randn(24,4))
a1.to_excel('data2_38_1.xlsx')
a2.to_csv('data2_38_2.csv')
f=pd.ExcelWriter('data2_38_3.xlsx')  #创建文件对象
a1.to_excel(f,"Sheet1")  #把a1写入Excel文件
a2.to_excel(f,"Sheet2")  #把a2写入另一个表单中
f.save()

结果输出:sheet1

|-------------------------|--------------|--------------|--------------|--------------|
| | A | B | C | D |
| 2019-11-01 00:00:00 | -2.748299329 | -0.475104592 | 0.472228159 | 0.375505189 |
| 2019-11-02 00:00:00 | 0.394135055 | 0.45445738 | 1.051139291 | -0.660948394 |
| 2019-11-03 00:00:00 | -0.115917366 | 0.887737643 | -0.065218775 | 0.628542098 |
| 2019-11-04 00:00:00 | -0.747042597 | 1.318587862 | 0.351375196 | 2.006559399 |
| 2019-11-05 00:00:00 | -0.538853276 | -0.323968035 | 1.641201831 | 0.832038225 |
| 2019-11-06 00:00:00 | -0.230819883 | 0.361226476 | 2.981059284 | -0.282752734 |
| 2019-11-07 00:00:00 | 0.446012847 | 0.157134853 | 0.469619956 | -0.864433374 |
| 2019-11-08 00:00:00 | 1.483407425 | -0.873613583 | 1.275881913 | 1.393361881 |
| 2019-11-09 00:00:00 | -2.993810574 | -1.894349715 | 0.246225339 | 0.81601978 |
| 2019-11-10 00:00:00 | 1.001127464 | -1.283670894 | -0.277494697 | -1.108403165 |
| 2019-11-11 00:00:00 | 0.032262937 | -0.41462315 | 1.363484182 | 1.084065374 |
| 2019-11-12 00:00:00 | 0.773718361 | -1.891746884 | -2.191906796 | -0.229845183 |
| 2019-11-13 00:00:00 | 0.718059485 | 0.056195426 | -0.166176378 | -0.879896707 |
| 2019-11-14 00:00:00 | -0.77786206 | -0.578132946 | 0.002456531 | -1.009984112 |
| 2019-11-15 00:00:00 | -0.140706394 | -1.672303883 | 2.379240797 | -0.477193 |
| 2019-11-16 00:00:00 | -0.330438832 | 1.349326828 | -1.611185835 | -1.117472688 |
| 2019-11-17 00:00:00 | 0.594385821 | -0.349566063 | 2.515628471 | 1.883487368 |
| 2019-11-18 00:00:00 | 0.458635953 | 0.091438019 | 0.142982058 | -1.865848673 |
| 2019-11-19 00:00:00 | -0.627796877 | 1.151659164 | -0.423611502 | 0.385119503 |
| 2019-11-20 00:00:00 | -0.427355063 | 1.11599053 | -0.405061267 | -1.614393977 |
| 2019-11-21 00:00:00 | -0.781224487 | 0.909184316 | 0.520003004 | 0.999774923 |
| 2019-11-22 00:00:00 | -2.707435426 | 0.136051358 | -1.594984208 | -1.879257378 |
| 2019-11-23 00:00:00 | 0.046396367 | 0.25656643 | -0.43525525 | 0.506502279 |
| 2019-11-24 00:00:00 | 0.208388964 | 0.489574841 | -0.145479331 | -1.435911666 |
| | | | | |

sheet2:

|--------|--------------|--------------|--------------|--------------|
| | 0 | 1 | 2 | 3 |
| 0 | 0.577840647 | -1.166175816 | 0.426540066 | 0.289906941 |
| 1 | -0.761093202 | 0.556510433 | 2.157621683 | 1.92666881 |
| 2 | -0.885518278 | 1.109919278 | -0.05744118 | -1.230625124 |
| 3 | -1.417081241 | -1.423943277 | 2.943984198 | 0.062130554 |
| 4 | 0.871431703 | 0.514709299 | 1.834358959 | -0.006424981 |
| 5 | -0.318933253 | 0.016404238 | -0.916817527 | 2.545955738 |
| 6 | 0.172685038 | -0.240089429 | -0.812485835 | -0.929242697 |
| 7 | -0.632386972 | 0.131235404 | 1.628522398 | -0.47808205 |
| 8 | -0.05836918 | -0.881596476 | -0.949172898 | -0.569644943 |
| 9 | 3.066127163 | -0.151334722 | 0.927841517 | -0.659900701 |
| 10 | -0.072356153 | -0.507385188 | -0.410943796 | -0.960699711 |
| 11 | -0.094601643 | -1.165757535 | 0.763395354 | 1.235162596 |
| 12 | 0.925644969 | 1.159180143 | 1.162082042 | 2.050544193 |
| 13 | 0.282632986 | -0.690629242 | -0.135016956 | -0.87034863 |
| 14 | -0.450855017 | -0.495952131 | 1.197093461 | -1.785680312 |
| 15 | 1.116692824 | -0.268930716 | 0.968960205 | -0.036150945 |
| 16 | 1.60770553 | -0.62976095 | 1.016795613 | 1.436878938 |
| 17 | -0.944857451 | -1.664227075 | -1.029120793 | -0.443128761 |
| 18 | -0.109741293 | 0.795166793 | 0.464880099 | -1.094235368 |
| 19 | -1.200246108 | -0.020148199 | 1.1456587 | -0.760855735 |
| 20 | -0.553791015 | 0.893002156 | 0.04330114 | 0.060816106 |
| 21 | -0.959809977 | -1.296699517 | -0.500587363 | -0.778686252 |
| 22 | -0.354374394 | 0.089239771 | -0.305737185 | 2.222021455 |
| 23 | 1.747781394 | 0.318085303 | 1.221900876 | 0.724086709 |
| | | | | |

2.5.1数据的一些预处理

数据合并

  • 堆叠合并 :将两个或多个表格在横向(x轴)或纵向(y轴)上进行拼接。这可以通过pandas.concat()函数实现。当表格的索引不完全一致时,可以选择内连接或外连接来决定如何处理索引。
  • 主键合并 :基于两个或多个表格的共同列(通常是主键)来合并数据。这通常使用merge()函数完成。
  • 重叠合并:涉及更复杂的数据合并策略,可能需要基于数据的特定逻辑或条件来合并数据。

数据清洗

  • 处理缺失值 :数据集中可能存在缺失值,可以使用fillna()函数将缺失值替换为特定的值(如0、平均值、中位数等)。
  • 删除重复行 :如果数据集中存在重复的行,可以使用drop_duplicates()函数来删除它们。
  • 处理异常值 :异常值是与数据集中其他值相差较大的值。可以使用clip()函数限制数据的范围,或者使用其他统计方法(如IQR方法)来识别和处理异常值。

数据标准化

  • 离差标准化:也称为最小-最大标准化,通过将数据值缩放到一个指定的范围(通常是0到1)来消除量纲和数量级的影响。
  • 标准差标准化:也称为Z-score标准化,通过将数据值转换为均值为0、标准差为1的分布来实现标准化。这有助于比较具有不同单位或量级的变量。
  • 小数定标标准化:通过移动数据值的小数点位置来标准化数据。这种方法在某些情况下可能很有用,但不如离差标准化和标准差标准化常用。

数据转换

  • 数据类型转换 :使用astype()函数将数据转换为适当的类型(如整数、浮点数、日期等)。
  • 哑变量处理 :对于分类数据,可能需要创建哑变量(或称为指示变量)来进行数值分析。这可以通过get_dummies()函数实现。
  • 离散化连续型数据 :有时需要将连续型数据转换为离散型数据,这可以通过cut()函数或自定义逻辑来实现。
相关推荐
_.Switch17 分钟前
Python机器学习框架介绍和入门案例:Scikit-learn、TensorFlow与Keras、PyTorch
python·机器学习·架构·tensorflow·keras·scikit-learn
赵荏苒29 分钟前
Python小白之Pandas1
开发语言·python
丶Darling.31 分钟前
代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作&&删除二叉搜索树中的节点&&修剪二叉搜索树
开发语言·数据结构·c++·笔记·学习·算法
一眼万里*e1 小时前
fish-speech语音大模型本地部署
python·flask·大模型
结衣结衣.2 小时前
python中的函数介绍
java·c语言·开发语言·前端·笔记·python·学习
茫茫人海一粒沙2 小时前
Python 代码编写规范
开发语言·python
林浩2332 小时前
Python——异常处理机制
python
LN-ZMOI2 小时前
c++学习笔记1
c++·笔记·学习
数据分析螺丝钉2 小时前
力扣第240题“搜索二维矩阵 II”
经验分享·python·算法·leetcode·面试
qq_421833673 小时前
计算机网络——应用层
笔记·计算机网络