IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Pandas库函数总结 -> 正文阅读

[人工智能]Pandas库函数总结


引入Pandas库:

import Pandas as pd
import json

补充:
(1) Series与DataFrame可以直接使用numpy的函数,例如np.abs(df):对DataFrame的数据取绝对值
(2) 处理JSON数据时需要引入JSON库

1. Series创建及增删改查

方式示例备注
通过list创建pd.Series([1,2,3,4,5])
通过numpy数组创建pd.Series(np.arange(1,6))
通过字典创建pd.Series({‘name’:‘李宁’,‘age’:18,‘class’:‘三班’})name,age,class为索引
重新索引ps.reindex([‘a’,‘b’,‘c’,‘d’,‘e’,‘f’])reindex 创建一个符合新索引的新对象,可利用fill_value参数对缺失值进行填充
增-方式1ps[‘g’] = 9在原Series对象上增加g索引
增-方式2ps.append(pd.Series({‘f’:999}))增加索引并生成新的Series对象
删-方式1del ps[‘b’]删除Series中索引b的值(在原有数据结构上删除)
删-方式2ps.drop(‘g’)删除索引g 产生新的对象(删除一条)
删-方式3ps1.drop([‘c’,‘d’])删除多条
改-方式1ps[‘a’]=999通过标签修改
改-方式2ps[0] = 888通过位置索引修改
查-行索引ps[‘a’]查看标签索引a对应的值
查-行索引ps[0]查看位置索引0对应的值
查-切片索引ps[1:4]位置切片索引(取不到末位)
查-切片索引ps[‘b’:‘d’]标签切片索引(可以取到末位)
查-不连续索引ps[[‘b’,‘e’]]标签索引
查-不连续索引ps[[0,2]]位置索引
查-布尔索引ps[ps>2]查询出值大于2的数据
高级索引-loc标签索引ps.loc[‘a’:‘c’]截取索引a-c之间的行
高级索引-iloc位置索引ps.iloc[1:3]不包含末位数据

补充:创建Series对象时可通过index参数指定索引

2. DataFrame创建及增删改查

方式示例备注
字典类data = {‘a’:[1,2,3,4],‘b’:[5,6,7,8],‘c’:np.arange(9,13)} frame = pd.DataFrame(data)数组、列表或元祖构成的字典构造dataframe
字典类pd.DataFrame({‘a’:pd.Series(np.arange(3)),‘b’:pd.Series(np.arange(3,5))})Series构成的字典构造dataframe
字典类data1 = {‘a’:{‘apple’:3.6,‘banana’:5.6},‘b’:{‘apple’:3,‘banana’:5},‘c’:{‘apple’:3.2}} pd2 = pd.DataFrame(data1)字典构成的字典构造dataframe
列表类pd.DataFrame(np.arange(12).reshape(4,3))2D ndarray 构造dataframe
列表类l1 = [{‘apple’:3.6,‘banana’:5.6},{‘apple’:3,‘banana’:5},{‘apple’:3.2}] pd.DataFrame(l1)字典构成的列表构造dataframe
列表类l2 = [pd.Series(np.random.rand(3)),pd.Series(np.random.rand(2))] pd.DataFrame(l2)Series构成的列表构造dataframe
重新行索引pd1.reindex([‘a’,‘b’,‘c’,‘d’])DataFrame行索引重建,可利用fill_value参数对缺失值进行填充
重新列索引pd1.reindex(columns=[‘C’,‘B’,‘A’])DataFrame列索引重建,可利用fill_value参数对缺失值进行填充
增(列)-方式1pd1[4] = 9增加列(在原DataFrame上操作),新增列的值全为9
增(列)-方式2pd1.insert(0,‘E’,[9,99,999])插入列(在原DataFrame上操作),第0个位置插入索引为E的列值为[9,99,999]
增(行)-方式1pd1.loc[‘d’] = [1,1,1,1,1]标签索引loc,该方式在原DataFrame操作
增(行)-方式2pd1.append(row,ignore_index=True)追加新的行 生成新的dataframe (ignore_index忽略原来的索引)
删(列)-方式1del pd1[‘E’]删除DataFrame中索引为E的列(在原有数据结构上删除)
删(列)-方式2pd1.drop(‘A’,axis=1)axis=1为删除列
删(列)-方式3pd1.drop(‘A’,axis=‘columns’)与axis=1等价
删(行)-方式1pd1.drop(‘a’)drop默认删除行索引,删除索引为a的一行数据(删除一条)
删(行)-方式2pd1.drop([‘a’,‘d’])删除多条,drop可加参数inplace:True表示在原对象上删除,并不会返回新的对象
改(列)-方式1pd1[‘A’] = 9或pd1[‘A’] = [9,10,11]索引A列的数据全部更改为9或改为数组中的对应值
改(列)-方式2pd1.A = 6对象.列的形式修改数据值
改(行)pd1.loc[‘a’] = 777loc标签索引
改(某行某列)pd1.loc[‘a’,‘A’] = 1000修改a行A列的数值
查-列索引pd1[‘A’]
查-列索引pd1[[‘A’,‘C’]]取多列
查-选取一个值pd1[‘A’][‘a’]选取A列a行的数据值
查-切片pd1[:2]获取前两行
高级索引-loc标签索引pd1.loc[‘a’:‘b’,‘A’]取到a-b之间行的A列
高级索引-iloc位置索引pd1.iloc[0:2,0:3]取到0-1行的0-2列数据(不包含末位数据)

补充:创建DataFrame对象可通过index指定行索引、columns指定列索引

3. Pandas常用函数

函数名说明示例使用备注
indexSeries或DataFrame查询索引s1.indexs1为变量名称,DataFrame查询行索引
columnsDataFrame查询列索引frame.columnsframe为变量名称
valuesSeries或DataFrame查询值s1.valuess1为变量名称
isnullSeries或DataFrame判断是否为空 空则为Trues3.isnull()s3为变量名称
notnullSeries或DataFrame判断是否为空 非空则为Trues3.notnull()s3为变量名称
nameSeries的Name属性设置s2.name = ‘temp’s3为变量名称
index.nameSeries对象索引名设置s2.index.name = ‘year’s2为变量名称
head取到Series的前N行s2.head(3)默认选择前5行
tail取到Series的后N行s2.tail(2)默认选择后5行
TDataFrame行与列进行转置pd5.Tpd5为变量名
add,raddSeries或DataFrame加法运算(+)s1.add(s2)与s1+s2效果一致,可通过设置fill_value填充NaN值,例如:fill_value=0填充值为0,字母r开头表示会翻转参数
sub,rsubSeries或DataFrame减法(-)df1.sub(s4,axis=‘index’)置axis='index’参数后DataFrame沿着列进行广播执行对应操作(axis='index’等价于axis=0)
div,rdivSeries或DataFrame除法(/)df1.rdiv(1)1/df1 与 df1.rdiv(1) 等价
floordiv,rfloordivSeries或DataFrame整除(//)
mul,rmulSeries或DataFrame乘法(*)
pow,rpowSeries或DataFrame幂次方(**)
apply通过apply将函数应用到列或者行df.apply(f) f = lambda x:x.max()默认axis=0(列),f为查找最大值的函数
applymap将函数应用到每个数据(具体到每个数据)df.applymap(f2) f2 = lambda x:’%.2f’%xf2为保留两位小数的函数
map利用函数/映射进行数据转换或重命名轴索引data[‘food’].map(lambda x:meat[x.lower()])详情可看数据转换看9.2.2节,重命名轴索引看9.2.4节
sort_indexSeries或DataFrame索引排序s1.sort_index()默认升序排序 指定降序排序 ascending=False,DataFrame默认行升序排序(按照列排序 设置axis=1)
sort_valuesSeries或DataFrame按值排序s1.sort_values(ascending=False)根据值的大小进行排序(默认升序),当有缺失值(NaN)默认排最后,DataFrame排序时用by参数指定列,例如:pd2.sort_values(by=‘b’)
uniqueSeries查询唯一值s1.unique()返回一个数组 Series中的唯一值 效果类似于SQL中的去重操作
index.is_uniqueSeries判断是否包含重复索引s1.index.is_unique判断Series的索引是否是唯一值(是否包含重复索引) 返回True或False
value_countsSeries计算每个值出现的个数ss1.value_counts()返回一个Series
isinSeries或DataFrame判断值是否存在判断一个值:ss1.isin([8]),判断多个值:data.isin([2,4])返回布尔类型
dropnaDataFrame丢弃缺失数据df3.dropna(axis = 1)默认丢弃出现NaN的行,设置axis=1表示丢弃列,how=‘all’(丢弃全为NaN的行或列),thresh=2(删除存在两个缺失值NaN的行或列)
fillnaDataFrame用指定值或插值方法(如ffill或bfill)填充缺失数据示例一:df3.fillna(-1.) 示例二:df.fillna({1:0.9,2:0})示例一:所有NaN的数据都改为-1.0 示例二:第一列出现的缺失值替换为0.9 第二列出现的缺失值替换为0 ; inplace参数对源数据进行修改 默认为False;method指定插值为ffill或bfill
swaplevel层级索引-交换索引s1.swaplevel()swaplevel()交换内层和外层的索引
sortlevel层级索引-排序s1.sortlevel()sortlevel() 先对外层索引进行排序 再对内层索引进行排序 默认升序
duplicatedDataFrame检查是否存在重复值 返回值为布尔值的Seriesdata.duplicated()默认是保留第一个
drop_duplicatesDataFrame删除重复data.drop_duplicates()删除重复数据 默认是保留第一个;可以指定列,例如:data.drop_duplicates([‘k2’]);参数keep='last’设置保留最后一个
replace替换值data.replace([-999,-1000],[np.nan,0])或data.replace({-999:np.nan,-1000:0})替换data中的-999为NaN,-1000为0
rename重命名轴索引data.rename(index={‘TOKY’:‘东京’},columns={‘three’:‘第三年’})可设置inplace=True在源数据修改
cut离散化和面元划分pd.cut(ages,bins)详情查看9.2.5节
qcut离散化和面元划分且使每个阶段的数据量大小相等pd.qcut(data,4)
take随机排列一个序列df.take(sam)df中的数据根据sam(新顺序数组)重新排列
sample随机选择一个序列df.sample(n=3)随机选择三行,可设置参数replace=True表示重复选择

4. Pandas常用统计函数

补充:
统计函数参数:axis=0按列统计(默认),axis=1按行统计;skipna排除缺失值,默认为True
使用方式:Series/DataFrame对象名.统计函数(参数)

方法说明
count非NA值的数量
describe针对Series或各DataFrame列计算汇总统计
minmax计算最大值和最小值
argminargmax计算能够获取到最小值和最大值的索引位置(整数)
idxminidxmax计算能够获取到最小值和最大值的索引值
quantile计算样本的分位数(0到1)
sum值的总和
mean值的平均数
median值的算术中位数(50%分位数)
mad根据平均值计算平均绝对离差
var样本值的方差
std样本值的标准差
skew样本值的偏度(三阶矩)
kurt样本值的偏度(四阶矩)
cumsum样本值的累计和
cummin、cummax样本值的累计最大值和累积最小值
cumprod样本值的累计积
diff计算一阶差分(对时间序列很有用)
pct_change计算百分数变化

5. Pandas读取与存储

  1. 写文件:to_csv函数
    示例:
#将df2中的数据写入csv文件中
df2.to_csv('out_ex1.csv')
  1. 读取文件函数
    使用方法:pd.函数名(参数)
函数说明
read_csv从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号
read_table从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(’\t’)
read_fwf读取定宽列格式数据(也就是说。没有分隔符)
read_clipboard读取剪贴板中的数据,可以看做read_table的剪贴板版。再将网页转换为表格时很有用
read_excel从 Exeel XLS或XLSX file读取表格教据
read_hdf读取pandas写的HDFS文件
read_html读取HTML文档中的所有表格
read_json读取JSON字符串中的数据
read_msgpack二进制格式编码的pandas数据
read_pickle读取Pythom pickle格式中存储的任意对象
read_sas读取存储于SAS系统自定义存储格式的SAS数据集
read_sql(使用SQL Alchemy)读取SQL查询结果为 pandas的 DataFrame
read_stata读取 Stata 文件格式的教据集

读取文件函数中参数说明:

参数说明
path表示文件系统位置、url、文件型对象的字符串
sepdelimiter用于对行中各字段进行拆分的字符序列或正则表达式
header用作列名的行号。默认为0(第一行),如果没有header行就应该设置为None
index_col用作行索引的列编号或列名。可以是单个名称/数字或由多个名称/数字组成的列表(层次化索引)
names用于结果的列名列表,结合header=None
skiprows需要忽略的行数(从文件开始出算起),或需要跳过的行号列表(从0开始)
na_values一组用于替换NA的值
comment用于将注释信息从行尾拆分出去的字符
parse_dates尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。此外,还可以指定需要解析的一组列号或列名。如果列表的元素为列表或元祖,就会将多个列组合到一起再进行日期解析工作(例如,日期/时间分别位于两个列中)
keep_date_col如果连接多列解析日期,则保持参与连接的列。默认为False
converters由列号/列名跟函数之间的映射关系组成的字典。例如,{‘foo’:f}会对foo列的所有值应用函数f
dayfirst当解析有歧义的日期时,将其看做国际格式(例如,7/6/2012->June,7,2012)。默认为False
day_parser用于解析日期的函数
nrows需要读取的行数(从文件开始处算起)
iterator返回一个TextParser以便逐块读取文件
chunksize文件块的大小(用于迭代)
skip_footer需要忽略的行数(从文件末尾处算起)

补充:
分块读取大文件的方式:

#读取五行
#方式一
agg1 = pd.read_csv(r'agg_match_stats_1.csv',chunksize=10)
agg1.get_chunk()
#方式二
agg1 = pd.read_csv(r'agg_match_stats_1.csv',iterator=True)
agg1.get_chunk(5)

6. JSON库与Pandas库转化

方式示例备注
loadsjson.loads(obj)将json字符串转换为python形式
dumpsjson.dumps(res)将python对象转化为json格式

补充:
读取python形式对象中某个参数的值:pd.DataFrame(res[‘siblings’],columns=[‘name’,‘age’])

7. Pandas数据分组与聚合

函数名说明
groupby分组
count聚合-分组中非NA值的数量
sum聚合-非NA值的和
mean聚合-非NA值的平均值
median聚合-非NA值的中位数
std,var聚合-标准差和方差
min,max聚合-非NA值的最小值,最大值
prod聚合-非NA值的乘积
first,last聚合-非NA值的第一个,最后一个

说明:

#对df1根据fruit属性分组
g = df1.groupby(by='fruit')
#选取任意数据块 示例:选取apple块
dict(list(df1.groupby(by='fruit')))['apple']
#根据水果求价格平均值 返回Series对象
df1.groupby(by='fruit')['price'].mean()
#语法糖 返回Series对象 结果与上条语句一致
df1['price'].groupby(df1['fruit']).mean()
#as_index=False显示索引项
df1.groupby(by='fruit',as_index=False)['price'].mean()
df1.groupby(by='fruit',as_index=False)['price'].mean()
#自定义聚合函数
#计算每一种水果的差值
def diff(arr):
    return arr.max()-arr.min()
#agg或aggregate
df1.groupby(by='fruit')['price'].agg(diff)
#多个分组条件  返回层级索引的Series对象
df1.groupby(by=['fruit','color'])['price'].mean()
#另一种写法
df1['price'].groupby(by=[df1['fruit'],df1['color']]).mean()
#小技巧:使输出结果为DataFrame对象
#orange	yellow	5.6
df1.groupby(by=['fruit','color'])[['price']].mean()
df1[['price']].groupby(by=[df1['fruit'],df1['color']]).mean()
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:15:13  更:2021-12-06 15:19:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 2:22:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码