pandas学习

(个人学习使用)

添加索引

# 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.639998Name: 股票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])    # 返回的是布尔值,满足括号里的值的返回Truedata.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])  及分成三个组

 ont-hot编码

# one-hot编码,将非数字类型的数据转换成数字类型的,这种pandas中常用
pd.get_dummies(data, prefix="")
#性别	年龄
0	男	12
1	男	13
2	女	89pd.get_dummies(dt, prefix="age")    # prefix是前缀,可不写年龄 age_女 age_男
0	12	0	1
1	13	0	1
2	89	1	0# 对标签进行one-hot编码
lb = LabelBinarizer()
lb.fit(list) # 传入列表
lb.tranform(test)# 例子
corpus = ['这 是 第一个 文档','这是 第二个 文档','这是 最后 一个 文档','现在 没有 文档 了']from sklearn.preprocessing import LabelBinarizerwords=[]
for corpu in corpus:words.extend(corpu.split())
words = list(set(words)) # 下面要传列表所以转换成listlb = LabelBinarizer()
lb.fit(words) # 传入列表# lb.classes_
c1 = corpus[0].split()
a = lb.transform(c1)# 将one-hot编码再转回去 lb.inverse_transform()
lb.inverse_transform(a)

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        18data.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=)  是否将设置为索引,默认是Falseca	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  20ca  va  qu
2  B   3  30
3  B   4  40ca  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.mzph.cn/news/8040.shtml

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

相关文章

微信存储空间清理

1、打开电脑版微信、点击左下角的三根横线 2、点击左侧的“设置” 3、弹出层左侧点击“文件管理” 4、点击右下角“打开文件夹” 5、默认4打开的为当前登录账户对应的文件夹&#xff08;建议清理路径步骤7&#xff09; 6、点击“WeChat Files”查看其他账户的文件夹&#xff0c…

智能制造RFID设备包括哪些?

智能制造是现代制造业的重要发展方向&#xff0c;其核心是数字化、网络化和智能化。而在智能制造中&#xff0c;RFID设备是一种不可或缺的技术手段&#xff0c;主要用于实现物品的识别、追踪和化管理。以下是智能制造中常用的RFID设备及其功能&#xff1a; 1、 RFID读写器 RFID…

[JAVAee]synchronized关键字

目录 1.synchronized的特性 ①互斥性 ②可重入性 2.synchronized的使用示例 ①修饰普通方法 ②修饰静态方法 ③修饰代码块 1.synchronized的特性 ①互斥性 互斥性,就像是给门上锁了一样. 当A线程使用了被synchronized修饰的代码块并对其上锁,其他线程(B线程,C线程)想要使…

Hadoop 之 Centos 7 搭建 Zookeeper 3.8.2 集群(六)

Zookeeper 集群搭建 一.Centos 虚拟机配置1.新建虚拟机&#xff0c;选择【典型】2.下一步&#xff0c;【稍后安装操作系统】3.下一步&#xff0c;选择【Linux】【Centos7 64位】4.下一步&#xff0c;设置虚拟机名称和安装目录5.下一步&#xff0c;默认6.下一步&#xff0c;【自…

计算机系统结构-多处理机

概念&#xff0c;多处理机指的是&#xff0c;多台含cpu的机器共享一个存储器。 &#xff08;可以通过网络宽带&#xff0c;也可以通过线直连这个存储器。当然他们也可以有自己的私有存储器或者高速缓存&#xff09; 几个cpu公用一个总线&#xff0c;没问题。但是如果十几个cpu…

elasticsearch查询操作(API方式)

说明&#xff1a;elasticsearch查询操作除了使用DSL语句的方式&#xff08;参考&#xff1a;http://t.csdn.cn/k7IGL&#xff09;&#xff0c;也可以使用API的方式。 准备 使用前需先导入依赖 <!--RestHighLevelClient依赖--><dependency><groupId>org.ela…

pytest中生成allure报告时,测试报告中统计的用例数不正确

【问题描述】&#xff1a;pytest中生成allure报告时&#xff0c;测试报告中统计的用例数不正确&#xff0c;用例数总是比实际用例数多 【问题定位】&#xff1a;因为生成index.html的allure报告&#xff0c;是根据临时的json文件生成的。每次运行时&#xff0c;没有删除旧的js…

PCB封装设计指导(十四)保存并产生device文件

PCB封装设计指导(十四)保存并产生PSM和device文件 封装命名完成之后,基本上封装的建立也接近结束,如果调网表使用的是第三方网表,还需要device文件才能调入。 但是PSM文件是不管第一方和第三方网表都是需要的,下面介绍如何产生这两个文件。 打开封装文件,如下图点击Fil…

openlayers系列:加载arcgis和geoserver在线离线切片

https://www.freesion.com/article/1751396517/ 1.背景 有个项目需要使用openlayer加载各种服务上发布的数据&#xff0c;坐标系也不同&#xff0c;我们都知道openalyer默认可以加载EPAG:3857,要加载4490的坐标系的数据需要重新定义一下&#xff0c;之后再加载。一想起要重新…

【C#】并行编程实战:使用 Visual Studio 调试任务

并行编程可以提高应用程序的性能&#xff0c;但是调试起来会更困难&#xff0c;这一点在之前的章节中我们已经有了很直观的感受。对于程序而言&#xff0c;保证程序的正确性和保证性能同样重要。 本章将介绍可以在 Visual Studio 中的调试工具&#xff08;包括 Thread 窗口、Ta…

Vue中TodoList案例_编辑

nextTick: MyItem.vue 加一个编辑按钮&#xff0c;input框&#xff1a;blur失去焦点时触发事件handleBlur&#xff0c;ref获取真实dom&#xff1a; <inputtype"text"v-show"todo.isEdit":value"todo.title"blur"handleBlur(todo,$even…

服务器中了360后缀勒索病毒,360后缀勒索病毒介绍解密数据恢复

360后缀勒索病毒&#xff0c;是BeijingCrypt勒索家族中的一种勒索软件病毒&#xff0c;这种恶意软件一旦攻击了企业的服务器就会利用自身独特的加密技术来全盘扫描系统文件&#xff0c;并对用户的全部文件进行加密&#xff0c;并要求用户支付赎金以解锁文件。近期&#xff0c;我…

SystemVerilog 第2章:数据类型

在 Verilog中,初学者经常分不清reg和wire两者的区别。应该使用它们中哪一个来驱动端口?连接不同模块时又该如何做? Systemverilog对经典的reg数据类型进行了改进,使得它除了作为一个变量以外,还可以被连续赋值、门单元和模块所驱动。为了与寄存器类型相区别,这种改进的数据类…

Python封装:提升代码质量的秘诀

在面向对象编程&#xff08;OOP&#xff09;中&#xff0c;封装是一种将数据和操作数据的方法绑定在一起的机制&#xff0c;以隐藏内部实现的细节&#xff0c;使代码更简洁、更安全。在Python中&#xff0c;我们通过定义类来实现封装。在本文中&#xff0c;我们将介绍Python封装…

常微分方程建模R包ecode(一)——构建常微分方程系统

常微分方程在诸多研究领域中有着广泛应用&#xff0c;本文希望向大家介绍笔者于近期开发的R包ecode&#xff0c;该包采用简洁易懂的语法帮助大家在R环境中构建常微分方程&#xff0c;并便利地调用R图形接口&#xff0c;研究常微分方程系统的相速矢量场、平衡点、稳定点等解析性…

视频内存过大如何压缩变小?这个压缩方法了解一下

在日常生活中&#xff0c;不管是日常随手拍的视频还是在工作中遇到的视频文件&#xff0c;在编辑处理的时候&#xff0c;如果视频的内存过大&#xff0c;不仅会占用很大的内存&#xff0c;在传送的时候也会花费很长时间&#xff0c;这时候将视频给压缩一下就可以很好的解决这一…

Feign远程调用如何携带form url

这是一个需要携带参数在form url上的请求&#xff0c;正常调用方式是这样的 响应&#xff1a; 在Feign中&#xff0c;应该怎么调用呢?? 定义OpenFeignClient接口 FeignClient(value "client-service", url "http://127.0.0.1/api") public interface…

Unity游戏源码分享-3d机器人推箱子游戏

Unity游戏源码分享-3d机器人推箱子游戏 一个非常意思的3D游戏 工程地址&#xff1a;https://download.csdn.net/download/Highning0007/88098014

STM32CUBEMX配置 定时器中断 和 上升沿中断(实现检测1s以内的脉冲个数)

———————————————————————————————————— ⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子&#xff0c;使用STM32CUBEMX做了很多驱动&#x…

Redis简介、常用命令

目录 一、​​关系数据库​​与非关系型数据库概述 1.1 关系型数据库 1.2 非关系型数据库 二、关系数据库与非关系型数据库区别 2.1 数据存储方式不同 2.2 扩展方式不同 2.3 对事务性的支持不同 三、非关系型数据库产生背景 四、Redis简介 4.1 Redis的单线程模式 4.…