Python22 Pandas库

news2024/9/17 7:20:55

Pandas 是一个Python数据分析库,它提供了高性能、易于使用的数据结构和数据分析工具。这个库适用于处理和分析输入数据,常见于统计分析、金融分析、社会科学研究等领域。

图片

1.Pandas的核心功能

Pandas 库的核心功能包括:

1.数据结构:Pandas 提供了两种主要的数据结构——DataFrame 和 SeriesDataFrame 是一个表格型的数据结构,可以想象成一个关系型数据表,具有可变的行和列。Series 是一个一维的标签数组,能够保存任何数据类型(整数、字符串、浮点数等)。

2.数据操作:Pandas 支持对数据进行插入、删除、合并、切片、聚合和重塑等多种操作。

3.处理缺失数据:Pandas 能够轻松处理缺失数据(例如:NaN)。

4.文件操作:Pandas 支持直接从或保存到多种文件格式如 CSV、Excel、SQL 数据库以及 HDF5 格式。

5.时间序列分析:Pandas 对时间序列数据有优秀的处理能力,能够进行日期范围生成、频率转换、移动窗口统计等操作。

因此,Pandas 是数据科学和量化分析领域中不可或缺的工具之一,用于数据清洗、分析以及准备数据用于进一步的统计或机器学习处理。

2.Pandas的使用

(1)Series数据结构

Series 对象是Pandas库中的基本数据结构之一,它主要用于单维度的数据集合(整数、浮点数、字符串、Python 对象等)。这种数据结构广泛应用于数据分析、数据清洗以及数据预处理过程中。该对象支持各种操作,如算术运算、聚合函数(求和、平均、最大值等)和条件过滤。同时,Series 非常适合处理时间序列数据。它可以有一个时间索引,这使得进行时间序列分析(如趋势分析、季节性调整等)变得更加直接和高效。此外,Pandas 还允许Series对象与其他数据结构(如DataFrame)无缝工作,可以方便地从 Series 转换到 DataFrame,反之亦然。

import pandas as pd  # 导入库并设置别名为‘pd’
import numpy as np  # 导入库并设置别名为‘np’
import matplotlib.pyplot as plt

# 创建一个Series对象:传递一个数值列表作为参数,令Pandas使用默认索引
s=pd.Series([1,2,4,np.nan,6,7,9,10])  # 其中np.nan是numpy中的特殊值,表示非数字(Not a Number),它通常用于表示缺失值或未定义的数值
print(s)

# 输出:
'''
0     1.0
1     2.0
2     4.0
3     NaN
4     6.0
5     7.0
6     9.0
7    10.0
dtype: float64
'''

(2)创建DataFrame对象

DataFrame 是一个二维的、表格型的数据结构,它可以存储多种类型的数据(整数、浮点数、字符串、Python 对象等),并且具有行和列的标签。

# 创建一个DataFrame对象:传递datetime索引和列标签的Numpy数组作为参数
# 首先创建一个时间序列,代码生成一个DatetimeIndex,包含从2013-01-01到2013-01-06的六个连续日期。
dates=pd.date_range('20130101',periods=6)
print(dates)
#创建DataFrame对象,指定index和columns标签
df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))  # 生成一个6行4列的列表,元素是从标准正态分布中抽取的随机数
print(df)

# 输出:
'''
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06'],
              dtype='datetime64[ns]', freq='D')
                   A         B         C         D
2013-01-01 -1.357961  0.850011 -0.636005  0.425649
2013-01-02  0.144545 -0.353026  0.128698 -0.038226
2013-01-03 -0.690415  0.217009 -0.038996 -1.387236
2013-01-04 -0.696815 -1.212856 -0.177951 -0.218372
2013-01-05  0.697114 -1.213185 -1.968390  0.825755
2013-01-06  1.019140 -0.733800  1.117218  0.990784
'''

查看数据:

# 观察数据
# 查看一个DataFrame对象的前几行和最后几行
print(df.head())
print(df.tail(3))
# 默认情况下 .head()和.tail()输出首尾的前5行,也可以指定输出行数
# 输出:
'''
                   A         B         C         D
2013-01-01 -1.357961  0.850011 -0.636005  0.425649
2013-01-02  0.144545 -0.353026  0.128698 -0.038226
2013-01-03 -0.690415  0.217009 -0.038996 -1.387236
2013-01-04 -0.696815 -1.212856 -0.177951 -0.218372
2013-01-05  0.697114 -1.213185 -1.968390  0.825755
                   A         B         C         D
2013-01-04 -0.696815 -1.212856 -0.177951 -0.218372
2013-01-05  0.697114 -1.213185 -1.968390  0.825755
2013-01-06  1.019140 -0.733800  1.117218  0.990784

'''

查看列表索引、列表标签、值并统计:

#查看索引
print(df.index)
#列表签
print(df.columns)
#数值
print(df.values)
#统计
print(df.describe())

'''
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06'],
              dtype='datetime64[ns]', freq='D')
Index(['A', 'B', 'C', 'D'], dtype='object')
[[-1.35796107  0.85001062 -0.63600535  0.4256489 ]
 [ 0.14454457 -0.35302596  0.128698   -0.03822612]
 [-0.69041478  0.217009   -0.03899589 -1.38723616]
 [-0.696815   -1.21285587 -0.17795143 -0.21837225]
 [ 0.69711448 -1.21318519 -1.96839039  0.82575471]
 [ 1.01914038 -0.73379976  1.11721757  0.99078445]]
              A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean  -0.147399 -0.407641 -0.262571  0.099726
std    0.918851  0.822011  1.016201  0.867018
min   -1.357961 -1.213185 -1.968390 -1.387236
25%   -0.695215 -1.093092 -0.521492 -0.173336
50%   -0.272935 -0.543413 -0.108474  0.193711
75%    0.558972  0.074500  0.086775  0.725728
max    1.019140  0.850011  1.117218  0.990784
'''

灵活使用DataFrame对象如转置、排序:

# 转置
print(df.T)
# 按列排序,逐步递减
print(df.sort_index(axis=1,ascending=False))
# 按值排序,‘B’列逐行递增
print(df.sort_values(by='B'))

# 输出:
'''
   2013-01-01  2013-01-02  2013-01-03  2013-01-04  2013-01-05  2013-01-06
A   -1.357961    0.144545   -0.690415   -0.696815    0.697114    1.019140
B    0.850011   -0.353026    0.217009   -1.212856   -1.213185   -0.733800
C   -0.636005    0.128698   -0.038996   -0.177951   -1.968390    1.117218
D    0.425649   -0.038226   -1.387236   -0.218372    0.825755    0.990784
                   D         C         B         A
2013-01-01  0.425649 -0.636005  0.850011 -1.357961
2013-01-02 -0.038226  0.128698 -0.353026  0.144545
2013-01-03 -1.387236 -0.038996  0.217009 -0.690415
2013-01-04 -0.218372 -0.177951 -1.212856 -0.696815
2013-01-05  0.825755 -1.968390 -1.213185  0.697114
2013-01-06  0.990784  1.117218 -0.733800  1.019140
                   A         B         C         D
2013-01-05  0.697114 -1.213185 -1.968390  0.825755
2013-01-04 -0.696815 -1.212856 -0.177951 -0.218372
2013-01-06  1.019140 -0.733800  1.117218  0.990784
2013-01-02  0.144545 -0.353026  0.128698 -0.038226
2013-01-03 -0.690415  0.217009 -0.038996 -1.387236
2013-01-01 -1.357961  0.850011 -0.636005  0.425649

'''

打印特定行或特定列的数据:

print(df["A"])  # 与df.A相同,打印A列
print(df.A)

# 使用[]分割DataFrame
print(df[0:3])  # 选取0-2行即前三行进行打印

print(df['20130102':'20130104'])  # 选取从2013-01-02到2013-01-04的行打印,包含开始和结束日期

# 输出:
'''
2013-01-01   -1.357961
2013-01-02    0.144545
2013-01-03   -0.690415
2013-01-04   -0.696815
2013-01-05    0.697114
2013-01-06    1.019140
Freq: D, Name: A, dtype: float64
2013-01-01   -1.357961
2013-01-02    0.144545
2013-01-03   -0.690415
2013-01-04   -0.696815
2013-01-05    0.697114
2013-01-06    1.019140
Freq: D, Name: A, dtype: float64
                   A         B         C         D
2013-01-01 -1.357961  0.850011 -0.636005  0.425649
2013-01-02  0.144545 -0.353026  0.128698 -0.038226
2013-01-03 -0.690415  0.217009 -0.038996 -1.387236
                   A         B         C         D
2013-01-02  0.144545 -0.353026  0.128698 -0.038226
2013-01-03 -0.690415  0.217009 -0.038996 -1.387236
2013-01-04 -0.696815 -1.212856 -0.177951 -0.218372

'''

按照标签选择数据:

# 按标签选择,选中一行
print(df.loc[dates[0]])
# 标签选中复制数列(所有行,输出只显示前5行)
print(df.loc[:,['A','B']])
# 行,列同时切分(包括起止点)
print(df.loc['20130102':'20130104',['A','B']])
# 返回一个元素(两种等效)
print(df.loc[dates[0],'A'])
print(df.at[dates[0],'A'])

# 输出:
'''
A   -0.096276
B   -0.840584
C   -0.425912
D    0.052560
Name: 2013-01-01 00:00:00, dtype: float64
                   A         B
2013-01-01 -0.096276 -0.840584
2013-01-02  1.790104  0.303063
2013-01-03  1.326804 -0.272038
2013-01-04  0.843435 -0.475088
2013-01-05  1.207635 -0.462329
2013-01-06 -0.374454  0.297715
                   A         B
2013-01-02  1.790104  0.303063
2013-01-03  1.326804 -0.272038
2013-01-04  0.843435 -0.475088
-0.09627595683105973
-0.09627595683105973
'''

按照位置选择数据:

# 按位置选择
# 位置索引为3的列,(从0开始,所以其实是第4列)
print(df)
print(df.iloc[3])
# 按位置索引分割DataFrame
print(df.iloc[3:5,0:2])
# 指定定位一个特定元素
print(df.iloc[1,1])
print(df.iat[1,1])

# 输出:
'''
                   A         B         C         D
2013-01-01 -0.096276 -0.840584 -0.425912  0.052560
2013-01-02  1.790104  0.303063 -0.747674 -0.304015
2013-01-03  1.326804 -0.272038 -0.602406  1.508931
2013-01-04  0.843435 -0.475088  0.241588  1.428372
2013-01-05  1.207635 -0.462329 -0.080737 -1.677173
2013-01-06 -0.374454  0.297715 -0.815562 -0.574843
A    0.843435
B   -0.475088
C    0.241588
D    1.428372
Name: 2013-01-04 00:00:00, dtype: float64
                   A         B
2013-01-04  0.843435 -0.475088
2013-01-05  1.207635 -0.462329
0.30306280237692435
0.30306280237692435
'''

使用布尔值进行索引:

# 布尔值索引
print(df.A>0)
# 使用.isin函数过滤数据
df2=df.copy()
df2
# 输出:
'''
2013-01-01    False
2013-01-02     True
2013-01-03     True
2013-01-04     True
2013-01-05     True
2013-01-06    False
Freq: D, Name: A, dtype: bool

                   A         B         C         D
2013-01-01 -0.096276 -0.840584 -0.425912  0.052560
2013-01-02  1.790104  0.303063 -0.747674 -0.304015
2013-01-03  1.326804 -0.272038 -0.602406  1.508931
2013-01-04  0.843435 -0.475088  0.241588  1.428372
2013-01-05  1.207635 -0.462329 -0.080737 -1.677173
2013-01-06 -0.374454  0.297715 -0.815562 -0.574843
'''

添加数据并打印:

df2['E']=['one','one','two','three','four','three'] # 添加一列数据
# 提取df2中'E'中包含['two','four']的行
print(df2[df2['E'].isin(['two','four'])])

# 输出:
'''
                   A         B         C         D     E
2013-01-03  1.326804 -0.272038 -0.602406  1.508931   two
2013-01-05  1.207635 -0.462329 -0.080737 -1.677173  four

'''

添加和修改数据:

# 为DataFrame创建一个新的列,其值为时间顺序的索引值
s1=pd.Series([1,2,3,4,5,6],index=pd.date_range('20130101',periods=6))
print(s1)
df['F']=s1
# 按标签赋值
df.at[dates[0],'A']=0
# 按索引赋值
df.iat[0,1]=0
# 使用numpy数组赋值
df.loc[:,'D']=np.array([5]*len(df))
print(len(df))
print(df)
# 输出:
'''
                   A         B         C         D     E
2013-01-03  1.326804 -0.272038 -0.602406  1.508931   two
2013-01-05  1.207635 -0.462329 -0.080737 -1.677173  four

'''

添加数据并打印:

#创建Dataframe对象,以dates[0:4]为索引,在df基础上再加一个新的‘E’列
df1=df.reindex(index=dates[0:4],columns=list(df.columns)+['E'])
#将'E'列的前两个行设为1
df1.loc[dates[0]:dates[1],'E']=1
print(df1)
# 输出:
'''
                   A         B         C         D     E
2013-01-03  1.326804 -0.272038 -0.602406  1.508931   two
2013-01-05  1.207635 -0.462329 -0.080737 -1.677173  four

'''

处理缺失数据:

# 处理缺失数据
# 调用 dropna 方法来删除 DataFrame 中含有任何 NaN 值的行
df1.dropna(how='any')
# 使用5填充缺省值
df1.fillna(value=5)
# 判断df1中的值是否为缺失数据,返回True/False
pd.isnull(df1)

# 输出:
'''
                A      B      C      D      E
2013-01-01  False  False  False  False  False
2013-01-02  False  False  False  False  False
2013-01-03  False  False  False  False   True
2013-01-04  False  False  False  False   True
'''

构建一个数据表:

df=pd.DataFrame([[1,1,1,1],[2,2,2,2],[3,3,3,3]],columns=['col1','col2','col3','col4'])
df

# 输出:
'''
   col1  col2  col3  col4
0     1     1     1     1
1     2     2     2     2
2     3     3     3     3

'''

计算每一列数据平均值:

print(df.mean(axis=0))  # mean(axis=0)计算的是每一列平均值, 

# 输出:
'''
 col1    2.0
col2    2.0
col3    2.0
col4    2.0
dtype: float64
'''

添加数据并打印:

print(df.mean(axis=1))  # mean(axis=1)计算每一行数据平均值

# 输出:
'''
0    1.0
1    2.0
2    3.0
dtype: float64
'''

删除某行:

print(df.drop(0,axis=0))  # drop(0,axis=0)删除第0行, 

# 输出:
'''
   col1  col2  col3  col4
1     2     2     2     2
2     3     3     3     3

'''

删除某列:

print(df.drop('col1',axis=1))  #drop([‘col1’],axis=1)删除列

# 输出:
'''
   col2  col3  col4
0     1     1     1
1     2     2     2
2     3     3     3
'''

重新设置索引:

df = pd.DataFrame([('bird',    389.0),
                   ('bird',     24.0),
                   ('mammal',   80.5),
                    ('mammal', np.nan)],
                  index=['falcon', 'parrot', 'lion', 'monkey'],
                  columns=('class', 'max_speed'))
df
# 输出:
'''
         class  max_speed
falcon    bird      389.0
parrot    bird       24.0
lion    mammal       80.5
monkey  mammal        NaN
'''

舍弃旧的索引:

# 舍弃旧的索引,索引重置为默认的整数索引
df.reset_index(drop=True)  # 原来的索引将被完全丢弃,不会保留为数据列

# 输出:
'''
    class  max_speed
0    bird      389.0
1    bird       24.0
2  mammal       80.5
3  mammal        NaN
'''

改变表中的数据:

# 改变df
df.reset_index(drop=True,inplace=True)  # 参数inplace=True决定操作是直接在原DataFrame(df)上修改还是返回一个新的DataFrame
df # 此时df已经改变

# 输出:
'''
    class  max_speed
0    bird      389.0
1    bird       24.0
2  mammal       80.5
3  mammal        NaN
'''

以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1860195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python flask使用flask_migrate管理数据库迁移

🌈所属专栏:【Flask】✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的点…

openfeign的原理 ????

1、我们使用openfeign调用远程接口就像调用本地方法一样简单。 2、支持spring mvc 注解 3、整合了更多的扩展 (请求重试策略、超时控制、请求拦截器) 4、open Feign是基于aop的原理,他会通过所加FeignClient的接口,自动拼接接口…

使用gradle上传maven工件到新版maven central仓库central.sonatype.com

本文主要用到的插件是sonatype-uploader, 该插件主要功能是上传依赖文件夹到中央仓库。 该文件夹的生成也十分简单,不用担心。 前言 最近在研究maven插件的时候发现发布的网站发生了变化,使用之前的一些插件没能满足我发布依赖的需求,也可…

公司加密软件的主要功能(五款优秀公司加密软件)

在当今数字化和信息化的时代,企业面对的最大挑战之一就是如何保护其敏感数据不被泄露或篡改。无论是内部员工的操作失误还是外部黑客的恶意攻击,都可能导致严重的数据泄露事件。公司加密软件作为一种强有力的安全工具,能够有效地保护企业的敏…

解析分子筛自动填充高原制氧机的工作原理及优势

在高原地区,由于空气稀薄,氧气含量相对较低,这给人们的生活、工作和学习带来了诸多不便。为了解决这个问题,高原制氧机应运而生,其中分子筛自动填充高原制氧机以其高效、稳定、安全的特点受到了广泛的关注和应用。 一、…

PointCloudLib RANSAC算法实现点云粗配准 C++版本

0.实现效果 原始点云 粗配准后的点云 1.算法原理 RANSAC(Random Sample Consensus)算法,更常见的是RANSAC的变种RANSAC-ICP(Iterative Closest Point)或RANSAC结合其他点云配准技术,用于实现两个点云或3D模型之间的粗配准。在这里,我将简要描述一个使用RANSAC算法进行…

【SQL Server数据库】关系模式与关系代数

目录 一、请用关系代数完成下列查询 1. 求 供应工程J1 零件P1的供应商号码SNO; 2. 求 供应工程J1 零件(P)为红色 的供应商号码SNO; 3. 求 没有使用 天津供应商(P)生产的红色零件(S&#xff0…

Win11 docker build拉取镜像失败(无法访问镜像仓库)

目录 遇到的问题: 修改docker配置 写了一个dockerfile(基于python的镜像)文件,在生成时,一直报错,换了好几个仓库,都是不行(包括阿里、南大、官网、网易、Azure中国镜像等都不行) 遇到的问题: 连接超时…

梅雨季,祛湿不健脾,湿气易反复!4个方法助您健脾胃,祛湿气!

进入梅雨季以来,苏州连续降雨,空气湿度增加,我们身体内的湿气也愈加严重:身上胖嘟嘟、脸上油乎乎、身体困重、乏力,极易疲劳,食欲减退,头昏昏沉沉的,大便也十分黏腻…… 关于祛湿&am…

【软件下载】Camtasia Studio 2024详细安装教程视频

习惯上来说Camtasia Studio是一款简单易用的高清录屏和视频编辑软件,拥有录制屏幕和配音、视频的剪辑和过场动画片、添加说明字幕和水印、制作视频封面和菜单、视频压缩和播放。不得不说Camtasia是一款屏幕录制和视频剪辑软件,教授课程,培训他…

RFID时尚产业链的创新引擎

在数智化浪潮的推动下,随着 RFID 技术的深入应用,时尚品牌不再仅仅局限于传统条码管理模式,而是选择与RFID紧密融合,从生产到销售,从管理到体验,都展现出了前所未有高效。 RFID技术凭借在库存管理、防伪等方…

51单片机STC89C52RC——4.1 矩阵按键(数码管显示按键值)

目录 目录 目的 一,STC单片机模块 二,矩阵按键模块 2.1 针脚定义 ​编辑 2.2 矩阵按键位置 2.3 如何理解按键按下后针脚的高低电平 2.3.1 错误理解1 2.3.2 错误理解2 2.3.3 正确判定按下的是那个按键的逻辑 2.3.4 判定按键按下的依次扫描程…

版本控制工具-git的基本使用

目录 前言一、git简介二、git工作流程三、安装git并配置git3.1 配置用户名和邮箱3.2 配置.gitignore文件(可选)3.3 配置ssh key(可选) 四、git基本命令4.1 创建本地仓库4.2 将工作区内容提交到本地仓库4.3 将本地仓库内容推送到远…

Python数据分析-对驾驶安全数据进行预测

一、研究背景和意义 随着汽车保有量的不断增加,交通事故已成为全球范围内的重大公共安全问题。每年因交通事故造成的人员伤亡和财产损失给社会带来了巨大的负担。为了提高驾驶安全,减少交通事故的发生,许多研究致力于探索影响驾驶安全的因素…

C++ | Leetcode C++题解之第190题颠倒二进制位

题目: 题解: class Solution { private:const uint32_t M1 0x55555555; // 01010101010101010101010101010101const uint32_t M2 0x33333333; // 00110011001100110011001100110011const uint32_t M4 0x0f0f0f0f; // 000011110000111100001111000011…

这就是算法:日常生活中的算法应用

日常小例 当我们一听到“算法”这个词,脑海里可能立刻浮现出数学公式和复杂计算的画面。 但事实上,算法并不总是那么高深莫测,很多算法其实是基于我们日常生活中随处可见的基本逻辑。 在深入讨论算法之前,我想先分享一个让人好…

python基础语法 003-2 数据类型字典

1 字典 1.1 字典的表示 字典:也是存储多个数据的,存储多个数据,不记得第二个存储什么用字典,存储多个数据首推列表; 1.1.1 表示方法: {‘key’ : value},用逗号隔开 #列表表示 my_songs [花海, 棉花糖…

2023国家最高科学技术奖薛其坤院士:科学家的幸福感来自于哪里

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨沛贤 深度好文:2000字丨8分钟阅读 6 月 24 日,2023 年度国家最高科学技术奖在京揭晓,薛其坤院士荣获中国科技界崇高荣誉,这不…

pyCharm项目更改目录后,执行路径未更新的解决办法

最头疼环境问题。 换电脑,原python脚本打成zip包,全部拷贝到新电脑上。一开始放到路径A下,不清楚是路径太长还是路径含有中文,执行失败。于是,更换到路径B,结果,仍然执行失败。Run中显示的信息…

【大数据】—量化交易实战案例双均线策略(移动平均线)

声明:股市有风险,投资需谨慎!本人没有系统学过金融知识,对股票有敬畏之心没有踏入其大门,今天用另外一种方法模拟炒股,后面的模拟的实战全部用同样的数据,最后比较哪种方法赚的钱多。 量化交易…