首页IT科技pandas中的数据结构(03-Pandas详解)

pandas中的数据结构(03-Pandas详解)

时间2025-06-20 15:27:09分类IT科技浏览3937
导读:Pandas...

Pandas

Pandas的主要功能

具备对其功能的数据结构DataFrame            、Series 集成时间序列功能 提供丰富的数学运算和操作 灵活处理缺失数据

Series

Series介绍:

Series是一种类似于一维数组的对象            ,由一组数据和一组与之相关的数据标签(索引)组成                   ,比较像列表和字典的结合体

Series创建方式: # 普通创建 pd.Series([1,2,3,4]) # 带索引创建 pd.Series([1,2,3,4],index=[a,b,c,d]) #但是我们依旧可以通过[0]来访问到数据       ,有两种访问方法         ,并没有被真正覆盖掉 # 使用字典创建 pd.Series({a:1,b:2})

Series使用特性

Series支持array特性 Series支持字典特性 从ndarray创建Series:Series(arr) 从字典创建Series,Series(dic) 与标量运算sr*2 in运算:a in str 两个Series运算:sr1+sr2 键索引:s[a]                   、s[[a       、b]] 索引:sr[0],s[[1,2,4]] 切片:sr[0:2] 通用函数:np.abs(sr) 布尔值过滤:sr[sr>0]

01-常用函数

# 获取索引值 sr.index # 获取值 sr.values # 根据标签花式索引 sr[[a,b]] # 根据标签切片 sr[a,b]

Sr整数索引问题在对Series进行切片处理时                  ,可能会出现整数访问的问题

import pandas as pd import numpy as np sr = pd.Series(np.arange(20)) sr2 = sr[10:].copy() sr2[10] # 可以正常访问 sr2[0] # 无法正常访问 # 如何解决整数索引的问题 # 通过标签选择 [[1,13,14],[10,11,12]] sr2.loc[10] #结果为1 # 通过下标选择 src.iloc[10] #选择失败          ,下标越界 src.iloc[0] #结果为1

02-数据对齐

在Series中      ,是按照索引对齐的                  ,两个Series对象是按照索引对齐然后计算的             。

sr1 = pd.Series([11,12,13],[a,c,d]) sr2 = pd.Series([14,15,21],[c,a,d]) sr1 + sr2 # 如果一个索引有             ,另外一个索引没有   ,那么就会出现NaN的结果 # 缺失值处理 sr1.add(sr2,fill_value=0)

运行结果如下

a 26 c 26 d 34 dtype: int64

DataFrame

DataFrame:

DataFrame是一个表格型数据结构                  ,含有一组有序的列.DataFrame可以被看作是Series组成的字典                ,并且共用一个索引                   。

创建DataFrame:先创建一个基础的DataFrame test1 = pd.DataFrame({one:[1,2,3],two:[4,5,6]},index=[a,b,c]) test1 # 或者也可以用以下格式,体现Pandas将字典转化为dataframe import pandas as pd data = {"name":["yahoo","google","facebook"],"marks":[200,400,800],"price":[9,3,7]} dataframe1 = pd.DataFrame(data,index=[one,two,three]) dataframe1

创建出的DataFrame对象如下

以及如下:

再通过Series创建一个DataFrame test2 = pd.DataFrame({one:pd.Series([1,2,3],index=[a,b,c]),two:pd.Series([1,2,3,4],index=[a,b,c,d])})

创建出的DataFrame对象如下

DataFrame读取CSV文件 # 读取csv文件 df = pd.read_csv(test.csv) # 保存csv文件 df.to_csv("文件名.csv")

01-常用属性

DataFrame常用属性

属性值 属性作用 index 获取索引 T 转置 columns 获取列索引 values 获取值索引 describe() 获取快速统计

02-索引与切片

# 根据索引名索引 df[][] #注意顺序不能反了 # 通过标签形式访问 df.loc[,] # 通过标签方式访问某几行 df.loc[[a,c],:]

03-数据对齐

DataFrame行列在进行数据对齐的时候               ,其行索引和列索引分别对齐

04-缺失值处理

DataFrame在处理缺失值的时候与Series有相像的地方                   ,但是在使用dropna()时候   ,会删除这一行      。

所以我们需要一个函数            ,当这一行全为NaN时候                   ,我们再删除它 # 当一行全为缺失值时       ,进行删除 test2.dropna(how=all) # 当一行只要有一个缺失值时         ,删除 test2.dropna(how=any) # 当一列只要有一个缺失值是                  ,删除 test2.dropna(axis=1,how=any) #默认axis=0,按行删除          ,修改axis=1,按列删除

05-常用函数

# 对列(行)求平均值 mean(axis=0,skipna=False) df.mean() #默认按照列求缺失数据 df.mean(axis=1) #按照行求缺失数据 # 对列(行)求和 df.sum() #默认按照列求缺失数据 df.sum(axis=1) #按照行求缺失数据 # 对列(行)索引排序      ,有NAN的部分不参与排序                  ,放到最后 df.sort_values(by=列名) #按照某列升序排列 df.sort_values(by=列名,ascending=False) #按照某列降序排列 df.sort_values(by=行名,axis=1) #按照某行升序排列 df.sort_values(by=行名,axis=1,ascending=False) #按照某行降序排列 # 按某一列(行)索引排序 df.sort_index() #按照行索引升序排序 df.sort_index(ascending=False) #按照列索引降序排序

时间序列

01-时间对象

Python标准库处理时间对象:datetime 灵活处理时间对象:dateutil 成组处理时间对象:pandas:pd.to_datetime()

时间对象转换代码

# 初步的时间对象转换 import datetime datetime.datetime.strptime(2023-02-06,%Y-%m-%d) # 忽略格式             ,自动转换 dateutil.parser.parse(2020-02-01) dateutil.parser.parse(2020-JAN-01) dateutil.parser.parse(03/04/2023) # pands转换方式 pd.to_datetime([2001-01-02,2020-Feb-03]) # 输出结果如下 pd.to_datetime([2001-01-02,2020-Feb-03])

02-生成时间范围

# 默认生成一段时间的时间序列 pd.date_range(2010-01-01,2010-05-01) # 选择起始节点   ,按天数生成 pd.date_range(2010-01-01,periods=60) # 选择起始节点                  ,按小时数生成 pd.date_range(2023-02-01,periods=60,freq=H) # 选择起始节点                ,输出工作日 pd.date_range(2023-02-01,periods=60,freq=B) #生成的是时间戳 # 时间范围转化为字符串 tm[0].to_pydatetime()

03-时间序列

时间序列:以时间对象为索引的Series或DataFrame,

datatime对象作为索引时是存储在DatetimeIndex对象中的

时间序列的特殊功能: 传入年或年月作为切片方式 传入日期范围作为切片方式 丰富的函数支持:resample()         、truncate() # 以B模式生成时间序列 sr = pd.Series(np.arange(100),index=pd.date_range(2023-01-01,periods=100,freq=B)) sr # 取时间序列中的值 返回结果为99 sr[2023-04-10] # 取时间序列之后的值 sr[2023-01-01:] # 取时间序列一段范围的值 # 返回结果为99

根据时间戳求每周的和

sr.resample(W).sum()

求和结果如下:

根据时间戳求每月的和 sr.resample(M ).sum()

文件操作

01-CSV文件读取

Pandas文件读取主要参数

参数名 参数作用 sep 指定分隔符, 可用正则表达式比如s+ header=None 指定文件无列名 name 指定列名 index_col 指定某列作为索引 skip_row 指定跳过某些行 na_values 指定某些字符串表示缺失值 parse_dates 指定某些列是否被解析为日期               ,类型为布尔值或者里欸包 # 读取csv文件                   ,将时间列作为索引(注意此时为字符串) pd.read_csv(test.csv,index_col=date) # 将时间字符串转为时间序列 pd.read_csv(test.csv,index_col=date,parse_dates=True) #将能表示为时间序列的数据表示为时间序列 # 指定某列为时间序列 pd.read_csv(test.csv,index_col=date,parse_dates=date) # 当没有列名   ,全是数据的时候            ,可以自动生成header                   ,默认0,1,2... pd.read_csv(test.csv,header=None) # 当没有列名       ,全是数据的时候         ,可以使用列表赋值header pd.read_csv(test.csv,header=None,names=[abcdefg]

02-CSV文件保存

Pandas文件保存主要参数

参数名 参数作用 sep 指定文件分隔符 na_rep 指定缺失值转换的字符串,默认空字符串 header=False 不输出列名的一行 index=False 不输出索引的一行 cols 输出指定的列

实战操作

01-读取股票数据

get_price():可以得到股票数据                  ,语法格式如下:

get_price(security,start_date=None,end_date=None,frequency=daily,fields=None,skip_paused=False,fq=pre,count=None)

get_price()函数可以按天或者按分钟读取数据,各项参数含义如下:

security:一只股票代码或一只股票代码的list start_date:开始时间          ,与参数count二选一      ,不可同时使用         。需要注意的是                  ,如果参数count和start_date都没有设置             ,则start_date生效值为:2015-01-01 end_date:结束时间   ,默认值是2015-12-31, frequency:单位时间长度                  ,几天或几分钟                ,默认为daily.也可以是minute                  、Xd          、Xm.X表示几的意思 fileds:字符串list,选择要获取行情的数据,默认为None                   。参数Fields支持SecurityUnitDate中所有的数据                ,包含 open close low high volume money factor high_limit low_limit avg pre_close paused skip_pasued:是否跳过不交易日期 fq:复权选项         。参数值设为pre                   ,表示前复权   ,为默认设置      。参数权设为None            ,表示不复权                   ,返回实际价格       ,参数值设为post         ,表示后复权

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
python collections模块(python operator模块有何用法?)