pandas学习

news2024/10/3 8:24:09

(个人学习使用)

添加索引

# index是行索引,columns是列索引
pd.DataFrame(score, index=idx, columns=col)

常用属性和方法

data.shape    # 形状
data.index    # 行索引
data.columns    # 列索引
data.values    # 里面的值,结果是ndarray类型数组
data.T    # 进行转置

data.head(n)    # 默认查看前5行的内容
data.tail(n)    # 默认查看后5行

索引的修改

# 修改索引
data.index = new    # 必须整体修改索引,不能单独修改其中一个索引
# 重设索引
data.reset_index(drop=False)    # 不写默认参数为False,及是否删除之前的索引,
# 修改新索引
data.set_index('第一天',drop=True)    # 不写默认为True,及把'第一天'多为索引时,是否删除原来的'第一天'

series属性方法

sr = data.iloc[1, :]
    第0天   -1.272936
    第1天   -0.042801
    第2天    0.872491
    第3天    1.688880
    第4天   -0.374057
    第5天    0.728194
    第6天   -0.978928
    第7天    0.639998
    Name: 股票1, dtype: float64
sr.values    # 获取值    
    array([-1.27293566, -0.04280051,  0.87249129,  1.6888803 , -0.37405686,
            0.72819427, -0.97892826,  0.63999758])

sr.index    # 获取索引值    
    Index(['第0天', '第1天', '第2天', '第3天', '第4天', '第5天', '第6天', '第7天'],             
    dtype='object')
data.drop(['索引名字'], axis=0/1)    # 删除某些列或者行
# 默认axis是按照行删除,所以删除时最好写上是删除行还是删除列

dataframe的索引

data['列索引']['行索引']    # 注意一定是先进行列索引再进行索引
        第0天	第1天	第2天	第3天	第4天	第5天	第6天	第7天
股票0	1.046882	-0.845770	1.030718	-0.992464	0.202662	0.733066	0.443001	-1.231117
股票1	-1.272936	-0.042801	0.872491	1.688880	-0.374057	0.728194	-0.978928	0.639998
股票2	-1.985832	-0.949589	-0.263581	-1.410954	0.638578	-0.401807	-0.798711	-0.070448
股票3	0.069881	0.375395	-2.242167	0.307771	0.040234	-0.097090	-1.822728	0.224412
股票4	1.648151	-1.100749	-0.946982	0.831372	-0.706177	1.475654	-0.397543	1.545838

# 按照 索引名字 进行索引
data.loc['行名','列名']    # 索引某个值
data.loc[:, :]    # 索引一段值
data.loc[['股票0','股票2'], ['第1天','第3天']]    # 直接使用列表

# 按照 下标 进行索引
data.iloc[1,2]    # 索引某个值
data.iloc[:, :]    # 索引一段值
data.iloc[[0,2],[1,2]]    # 直接使用列表
data.index[0:4]    # 获取行索引
    Index(['股票0', '股票1', '股票2', '股票3'], dtype='object')

data.columns.get_indexer(['第1天','第2天'])    # 获取列索引的下标
    array([1, 2], dtype=int64)

dataframe值排序

data.sort_values(by=['',''], ascending=True/False)
# by后边是按照什么属性进行排序,可以是多个属性。 默认是从小到大排序,

dataframe按索引排序

data.sort_index()    # 将索引按照顺序排序

series的值排序和索引排序

# series可以是按行取出来的,也可以是按列取出来的
data['股票0'].sort_values(ascending=)    # 对值进行排序

data.iloc[1, :].sort_index(ascending=)    # 对索引进行排序

算数运算,逻辑运算

# 主要使用函数有
# describe,sum,prod,median,mode,abs,max,min,mean,var,std,div
# idxmin,idxmax,isin,query,add,sub,apply
# 累计统计函数
# cumsum,cummax,cummin,cumprod
# dataframe和series一样也可以直接使用+-*/运算符
# dataframe可以直接使用<,>,|,&逻辑运算符,返回布尔值

data.add(n)
data.sub(n)

# 布尔索引
data[data['a']>0]
data[(data['a']>0 & data['b']<0)]

data.query("a>0 & b<0")    # 与上面的布尔索引效果一样,括号里填入查询条件
data.isin([a,b,c])    # 返回的是布尔值,满足括号里的值的返回True

data.describe()    # 返回对data数据的基础统计
# count,mena,std,min,25%,50%,75%,max

# 自定义运算 apply(func, axis=)
data.apply(lambda x:x.max()-x.min(), axis=0)

pandas画图

data.plot(x="a", y="b", kind="scatter")    # 还有stacked参数,是否堆叠
# x是横坐标属性,y是纵坐标属性,
# kind是图形的类型
line    折线图
bar    柱状图
barth    水平柱状图
hist    直方图
pie    饼图
scatter    散点图

pandas读写文件

# 常用读取文件函数及参数

pd.read_csv(path, usecols=[想读取哪些列], header=None, names=[没有列属性时指定列属性名字])
# 文件中没有列属性时使用header=None,或者使用names=[]来指定列属性名字

pd.to_csv(path,culomns=[想写入的列],index=,header=,mode=)
# index=False    写入时不把行索引写入
# header=False    写入时不把列索引写入
# mode=''    写入的模式,w,a等


pd.read_json(path, orient="records", lines=True)
# orient="recordes"    将数据存储成记录的形式
# lines=True    按行读取
pd.to_json(path, orient="records", lines=True)

缺失值处理

# 表示空值的方法
pd.NA    np.NaN    None    float('nan')
# 判断是否有缺失值
data.isnull()
data.notnull()

pd.isnull(data)
pd.notnull(data)
# 上述两种方法都行


## 是np.nan类型的缺失值处理
# 删除缺失值
data.dropna(inplace= , axis=)
# inplace=True/False  来决定是否再原来的数据上直接进行删除
# axis=0/1  行删除还是列删除

# 填补缺失值
data.fillna(value, inplace=)
# value是要将缺失值替换成的数据
# inplace同缺失值的处理


## 是?或者等别的标记来代替缺失值的处理
# 1.先将标记替换成np.nan
# 2.再进行处理
data.replace(to_replace='标记符号', value=np.nan)
# 替换函数,参数名字也可以不写直接写成data.replace('标记符号', np.nan)

数据离散化

# 数据分组
pd.qcut(data, n)
pd.cut(data, [])
# 自动分组
pd.qcut(data, n, labels=[分组后的标签])
一般使用
pd.qcut(data, n)
# data是要分组的数据,n是分成几组

# 自定义分组
pd.cut(data, [分组的间隔], labels=[])
# pd.cut(data, [1,3,6,9])  及分成三个组
# one-hot编码,将非数字类型的数据转换成数字类型的,
pd.get_dummies(data, prefix="")
#
	性别	年龄
0	男	12
1	男	13
2	女	89

pd.get_dummies(dt, prefix="age")    # prefix是前缀,可不写

    年龄 age_女 age_男
0	12	0	1
1	13	0	1
2	89	1	0

dataframe合并

# 合并 pd.concat()
pd.concat([a,b], axis=)
# (a,b)需要合并的数据,axis按照什么方向
# 连接 pd.merge(a, b, how="", on=[])

pd.merge(d1, d2, how="inner", on=['k1', 'k2'])
# d1 数据1,d2 数据2,
# how是使用什么方式连接 left, right, outer, inner
# on是通过什么字段来连接

 

 交叉表与透视表

# 交叉表  pd.crosstab()
pd.crosstab(value1, value2)

# 透视表  data.pivot_table()
   Month  Product  Sales  Quantity
0      1        A    100        10
1      1        B    200        20
2      2        A    150        15
3      2        B    250        25
4      3        A    120        12
5      3        B    180        18

data.pivot_table(['Sales'], index=['Month'], columns='Product', aggfunc='mean')
# aggfunc参数名字也可以省略不写,直接写'mean'
# 某些列按照index的列进行分组

Product    A    B
Month            
1        100  200
2        150  250
3        120  180

 dataframe的分组与聚合

# data.groupby([按照什么分组], as_index=)  是否将设置为索引,默认是False

    ca	va	qu
0	A	1	10
1	A	2	20
2	B	3	30
3	B	4	40
4	C	5	50
5	C	6	60

# 返回的是迭代器,所以不能直接看结果,要使用聚合函数后才能看到结果
data.groupby(['ca'])['va']max()

data['va'].groupby(data['ca']).max()
# 上面两个效果一样

# 可以使用get_group()来查看某个分组的数据
data.groupby(['ca']).get_group('A')

ca	va	qu
0	A	1	10
1	A	2	20


# 因为返回的是迭代器,所以想要看到数据可以使用for
# 迭代器中有两个变量,一个是按照分组的名字,一个是数据
s = data.groupby(['ca'])['va']max()
for name,data in s:
    print(name)
    print(data)

  ca  va  qu
0  A   1  10
1  A   2  20
  ca  va  qu
2  B   3  30
3  B   4  40
  ca  va  qu
4  C   5  50
5  C   6  60
# 常用聚合函数
count():  计算每个分组中非缺失值的数量。
sum():  计算每个分组中数值列的总和。
mean():  计算每个分组中数值列的均值。
median():  计算每个分组中数值列的中位数。
min():  计算每个分组中数值列的最小值。
max():  计算每个分组中数值列的最大值。
std():  计算每个分组中数值列的标准差。
var():  计算每个分组中数值列的方差。
agg():  自定义聚合函数,可以传递一个或多个函数进行聚合操作。
apply():  对每个分组应用自定义函数进行聚合操作。

# agg(['min','max','mean']) 就是可以使用多个聚合函数

data.groupby(['sex'])['age'].agg(['min','max','mean'])
# 根据性别分组,算年龄的最小值,最大值,平均值

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

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

相关文章

SpringBoot登陆+6套主页-【JSB项目实战】

SpringBoot系列文章目录 SpringBoot知识范围-学习步骤【JSB系列之000】 文章目录 SpringBoot系列文章目录本系列校训 SpringBoot技术很多很多环境及工具&#xff1a;上效果图主页登陆 配置文件设置导数据库项目目录如图&#xff1a;代码部分&#xff1a;控制器过滤器详细的解…

docker Registry私有仓库

一、docker自带的本地私有仓库配置 #首先下载registry镜像 docker pull registry#在daemon.json文件中添加私有仓库地址 vim /etc/docker/daemon.json {"insecure-registries": ["192.168.60.11:5000"], #添加&#xff0c;注意用逗号结尾"registr…

验证码登录如何实现?

手机验证码登录 1、需求分析2、数据模型3、代码开发-交互过程4、代码开发-准备工作5、代码开发-修改LoginCheckFilter6、代码开发-接口开发7、前端代码介绍8、启动测试 1、需求分析 为了方便用户登录&#xff0c;移动端通常都会提供通过手机验证码登录的功能。 手机验证码登录…

Android性能优化之修复游戏中内存泄漏(java层)

游戏在bugly上内存OOM越来越严重&#xff0c;因此&#xff0c;近期对内存进行优化。从java层的内存进行优化开始&#xff0c;通过LeakCannary或者adb shell 获取到内存快照&#xff0c;发现好几处内存泄漏点。 1.单例类持有Activity&#xff1a; 查看内存快照&#xff0c;该闪…

MFC第二十天 数值型关联变量 和单选按钮与复选框的开发应用

文章目录 数值型关联变量数值型关联变量的种类介绍 单选按钮与复选框单选按钮的组内选择原理解析单选按钮和复选框以及应用数值型关联变量的开发CMainDlg.cppCInputDlg.hCInputDlg.cpp 附录 数值型关联变量 数值型关联变量的种类介绍 1、 数值型关联变量&#xff1a; a)控件型…

STM32MP157驱动开发——按键驱动(异步通知)

文章目录 “异步通知 ”机制&#xff1a;信号的宏定义&#xff1a;信号注册 APP执行过程驱动编程做的事应用编程做的事异步通知方式的按键驱动程序(stm32mp157)button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “异步通知 ”机制&#xff1a; 信号的宏定义&#x…

请问学JavaScript 前要学html 和css 吗?

前言 html和css可以理解为是一个网站的骨架和皮肤&#xff0c;这两部分做好后整个网站的外观展示的完成度基本就有了个90%左右&#xff0c;所以在学习js前是需要学习html和css 的&#xff0c;这两部分不用花特别多的时间&#xff08;虽然css如果想做一些非常炫酷的效果个人认为…

记一次容器环境下出现 Address not available

作者&#xff1a;郑明泉、余凯 困惑的源地址 pod 创建后一段时间一直是正常运行&#xff0c;突然有一天发现没有新的连接创建了&#xff0c;业务上是通过 pod A 访问 svc B 的 svc name 的方式&#xff0c;进入 pod 手动去 wget 一下&#xff0c;发现报错了 Address not avai…

Roslyn 动态编译

NET 编译器平台&#xff08;.NET Compiler Platform&#xff09; 也称为Roslyn&#xff0c;是Microsoft的一组用于C#和Visual Basic (VB.NET) 语言的开源 编译器和代码分析 API。 该项目特别包括C# 和 VB.NET 编译器的自托管版本——用语言本身编写的编译器。编译器可通过传统…

vue2路由(个人学习笔记四)

目录 友情提醒第一章、路由简介1.1&#xff09;什么是路由1.2&#xff09;安装路由插件 第二章、自定义路由器2.1&#xff09;创建路由器文件index.js文件2.2&#xff09;index.js文件中配置路由信息 第三章、使用路由器3.1&#xff09;在main.js文件中将路由器绑定到Vue对象3.…

查看maven发布时间的方法

查看maven发布时间的方法如下【 打开maven官网 选中Release Notes 即可查看对应版本的发布时间 】

【Linux命令200例】cmp文件比较工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

微信小程序开发知识点总结(不断补充)

一、怎样实现小程序与数据库的交互原理 微信小程序开发里面是不能直接写数据库连接文件&#xff0c;如果要实现与数据库的交互&#xff0c;就需要用到中间的接口。&#xff08;这个接口可以理解成springboot项目中controller层的RequestMapping的URL&#xff09;具体用法如下&…

Thunderbird 115 带来了Supernova UI 和先进功能

导读Thunderbird 115 带来了Supernova UI 和先进功能&#xff0c;将电子邮件带入了新的高度。 流行的开源电子邮件客户端 Mozilla Thunderbird 推出了最新版本Thunderbird 115&#xff0c;它带来了一系列令人兴奋的功能和改进。更新带来了令人耳目一新的超新星用户界面(UI)&…

STM32MP157驱动开发——按键驱动(线程化处理)

文章目录 “线程化处理”机制&#xff1a;内核函数线程化处理方式的按键驱动程序(stm32mp157)编程思路button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “线程化处理”机制&#xff1a; 工作队列是在内核的线程的上下文中执行的 工作队列中有多个 work&#xff0…

matlab安装激活后报错找不到icuuc54.dll

matlab激活后&#xff0c;有报错找不到icuuc54.dll 解决办法&#xff1a; 这是因为破解用的版本不一样&#xff0c;我下载的是matlab2016b&#xff0c;但是破解时&#xff0c;在网上下载的matlab2016a的破解包&#xff0c;所以我重新下载2016b的crack包后&#xff0c;然后再在…

使用Vs Studio和Cmake生成C++库

使用Vs Studio和Cmake生成C库 在windows系统下&#xff0c;由于没有C的编译器&#xff0c;想通过源码安装、加载C的库存在不方便的地方。本文将介绍通过使用Vs Studio运用Cmake的方式&#xff0c;编译一个简单的自定义库&#xff0c;并进行加载、调用。 工程源代码 前提条件 …

Python增删改查小练习

目录 1. List操作-增加 2. List操作-查询 3. List操作-修改 4. List操作-删除 资料获取方法 1. List操作-增加 List Append(“xx”) 插入到列表尾部 Insert(x,xx) 在指定的位置插入 Extend 将列表的元素分开,插入到之前列表的尾部 小练习: 把一个字符串”abcdefg…

小白必看系列之c语言中常见操作符示例和用法总结

文章目录 前言算术操作符&#xff08;Arithmetic Operators&#xff09;代码示例代码解析 关系操作符&#xff08;Relational Operators&#xff09;代码示例代码解析 逻辑操作符&#xff08;Logical Operators&#xff09;代码示例代码解析 位操作符&#xff08;Bitwise Opera…

矩阵svd分解和矩阵的伪逆

真该好好学习一下Latex数学公式的语法和规则了&#xff0c;否则&#xff0c;连写个博客都没法写&#xff0c;这叫什么事&#xff01; https://blog.csdn.net/ViatorSun/article/details/82826664 直接上数学博士写的ppt图&#xff08;肯定比我在这里胡说八道强的多&#xff0…