数据科学 | Pandas新手入门
在Python中常用的数据分析工具中,我们通常使用pandas
软件包。本文主要介绍pandas
的常见操作。
1 数据框的生成与特性
1.1 数据框的生成
pandas
以类似字典的方式来生成数据集。
import numpy as np
import pandas as pdd0 = {'x1':5,'x2':989}
d1 = {'x2':np.arange(3),'x1':([4.5,9],8),'x3':(1,2,5.7)}
d2 = {'x3':{'m':3,'n':5},'x2':([4.3],[9.0])}
df = pd.DataFrame([d0,d1,d2])
r2 = df.loc[2,'x3']['m']
r2
引用数据框中的数据,使用iloc
和loc
命令。loc
根据数据框的行名index
来索引对应的行。iloc
是根据行号来索引,行号从0开始,逐次加1。
r1 = df.iloc[1,0][0]
r1
r2 = df.loc[2,'x3']['m']
r2
r3 = df.x1[1]
r3
数据框生成的两种写法:一种是使用字典的方式,另一种使用numpy
包,生成向量后,再生成数据集。
d1 = {'x1':[1,2,3,4],'y1':[23,4,5,6]}
df1 = pd.DataFrame(d1)
df1
import numpy as np
d1 =np.array([[1,2,3,4],[23,4,5,6]]).T
df1 = pd.DataFrame(d1,columns=['x1','y1'])
df1
1.2 数据框的描述性统计
首先产生一个数据框。
import numpy as np
np.random.seed(523)
name = ['x1','x2','x3','y']
df = pd.DataFrame(np.random.randn(7,4),columns=name)
df['sex'] = ['F']*3 + ['M'] * 4
df
查看前两行。
df.head(2)
查看后三行。
df.tail(3)
输出一些描述性统计指标。
df.describe()
查看数据集的变量名称。
df.columns
查看数据的变量行名。
df.index
可以修改行名。
df.index = ['A','B','C','D','E','F','G']
输出最后3个变量的头4行。
df[df.columns[2:]][:4]
数据框的元素个数。
df.size
数据框的形状。
df.shape
1.3 数据框行列名修改
df.rename(columns={'x1':'price','x2':'length'},inplace=True)
df.columns
df.index = np.arange(2,9)
df
df['price2']=np.copy(df.price)
df2 = df.set_index('price2')
df2
把现有index
的反向作为新的index
。
new_index = df2.index[::-1]
df2 = df2.reindex(new_index)
df2
把原来的index
变为一个变量。
df2.reset_index()
把原来的index
去掉。
df2.reset_index(drop=True)
2 常见类型文件的存取
保存csv文件和xlsx文件。
import os
import pandas as pd
##当前文件所在位置
os.getcwd()
##创建文件夹Data
os.makedirs('/Data', exist_ok=True)
## 保存csv文件
df.to_csv('Data/Df.csv',index=False) ##不加入行名
df.to_csv('Data/Df2.csv',index=True) ##保存行名
## 保存xlsx文件
dfexcel = pd.ExcelWriter('Data/Df.xlsx')
df.to_excel(dfexcel,'dfexcel',index=True)
df.to_excel(dfexcel,'dfexcel2',startrow=2,startcol=3,index=True)
dfexcel.save()
读取excel数据。
## 读取excel数据
dfxls = pd.read_excel('Data/Df.xlsx','dfexcel',index_col=0)
dfxls
3 数据框的简单计算和数据操作
3.1 数据的生成和转置
np.random.seed(523)
df = pd.DataFrame(np.random.randn(7,4),columns=['A','B','C','D'])
#df['sex']=['F']*3+['M']*4
df.index = range(1,8)
df
数据框转置,df.T
。
df2 = df.T
df2
df2.columns = ['A','B','C','D','E','F','G']
df2.index=range(1,5)
df2
3.2 数据框的加法减法
只有变量名、行名、数据类型对的上的元素才能相加,不匹配的元素相加会显示为NaN
。
df3=df-df2
df3
3.3 计算变量的增长率
使用错位相减方法,计算变量A
的增长率。
df['A_growth'] = df['A']/(df['A']-df['A'].diff())-1
df
3.4 通过变量的值筛选数据
选择A
小于0,或者增长率大于1的A
,B
,C
和A_growth
列,下面两种写法结果一致。
df.loc[(df['A']<0)|(df.A_growth>1),['A','B','C','A_growth']]
df.loc[(df['A']<0)|(df.A_growth>1)][['A','B','C','A_growth']]
3.5 按照多个变量进行排序
把数据df中的每个数据按type
进行降序排序,type
内每类进行升序排序。
df['type'] = ['type1']*2+['type2']*2+['type1']*2+['type3']
df.sort_values(by=['type','B'],ascending=[False,True])
3.6 根据变量条件建立新变量
根据数据df中的A
建立新变量AType
,大于0为positive
,小于等于0 为negtive
。
df.loc[df.A>0,'AType']='positive'
df.loc[df.A<=0,'AType']='negtive'
df
3.7 在已有的数据框中插新变量
使用insert
函数将id
插入到第0列。若插入同名变量,需设置allow_duplicates=True
。
df.insert(loc=0,column='id',value=np.random.randn(7))
df
df.insert(5,'id',0,allow_duplicates=True)
df
3.8 删除数据框的变量和观测值
使用drop
变量,删除数据框df
中的1,3,5行以及id
变量。
df_new = df.drop(index=[1,3,5],columns='id')
df_new
4 长宽数据转换及数据集之间的合并
4.1 长宽数据转换
使用melt
实现宽数据转长数据。id_vars
是要保留的主字段,var_name
拉长的分类变量,value_name
拉长的度量值名称。
import pandas as pd
import numpy as np
df=pd.DataFrame({
"名称":["苹果","香蕉","橘子","梨","葡萄"],
"产地":["A","B","C","D","E"],
"Sale2013":[5000,3500,2300,2100,3100],
"Sale2014":[5050,3800,2900,2500,3300],
"Sale2015":[5050,3800,2900,2500,3300],
"Sale2016":[5050,3800,2900,2500,3300]})
df
df1=df.melt(id_vars=["名称","产地"], #要保留的主字段
var_name="Year", #拉长的分类变量
value_name="Sale") #拉长的度量值名称
df1
长数据转为宽数据可以通过透视的功能实现,类似于excel中的透视表功能。用pivot
方法实现。index
为透视的索引,columns
是透视的列,values
是透视的值。
df2 = df1.pivot(index='Year',columns=['名称','产地'],values='Sale').T
df2
4.2 数据合并
使用merge
进行合并,on
为合并的关键字段,how
为连接方式,merge
函数默认连接方式是inner
,另外有left
,right
,outer
等,当两个数据集合并的列名不相同时用left_on
,right_on
。
import pandas as pd
import numpy as np
df1=pd.DataFrame({'key':['a','b','c','d','e'],'data2':np.arange(5)})
print(df1)
df2=pd.DataFrame({'key':['a','b','c'],'data1':np.arange(3)})
print(df2)
df=pd.merge(df1,df2,on='key',how='inner')
print(df)
df=pd.merge(df1,df2,on='key',how='left')
print(df)
df=pd.merge(df1,df2,on='key',how='right')
print(df)
df=pd.merge(df1,df2,on='key',how='outer')
print(df)
df1=df1.rename(columns={'key':'key1'})
df_new=pd.merge(df1,df2,left_on='key1',right_on='key',how='left')
print(df_new)
本文内容主要来自吴喜之和张敏老师编著《Python 数据科学的手段》,源码已上传到我的Github的OpenDataScience中,有需要的读者可以阅览下载。
数据科学 | Pandas新手入门相关推荐
- azw3 python数据分析 活用pandas库_Python数据分析 活用Pandas库 数据科学教程数据分析入门图书 Python编程入门数据处理...
内容介绍 本书是Python数据分析入门书,每个概念都通过简单实例来阐述,便于读者理解与上手.具体内容包括:Python及Pandas基础知识,加载和查看数据集,Pandas的DataFrame对象和 ...
- csv导入pgsql不成功_数据科学 | pandas数据导入与导出
↑↑↑↑↑点击上方蓝色字关注我们! 『运筹OR帷幄』原创 作者:杨士锦 周岩 书生 编者按 当我们开始着手做一个数据分析项目时,选择和导入数据集是第一个步骤,而导出数据虽然非必需,但有时候我们也需要保 ...
- python数据科学指南是什么_Python数据科学实践 | Spyder入门
Spyder入门 01 Spyder--Python编程的"热带雨林" Spyder是一个用于科学计算的使用Python编程语言的集成开发环境(IDE).它结合了综合开发工具的高级 ...
- mysql数据库命令_新手入门MYSQL数据库命令大全
一.命令行连接数据库 Windows操作系统进入CMD命令行,进入mysql.exe所在目录,运行命令 mysql.exe -h主机名 -u用户名 -p密码 注意:参数名与值之间没有空格 , 如:-h ...
- 微信数据包解析 php,微信交互数据包分析 - 新手入门及其它(软件) - 恩山无线论坛 - Powered by Discuz!...
本帖最后由 derry 于 2019-3-7 23:30 编辑 微信启动后,主要建立以下连接: 1. 建立tcp长链接 端口号:80.443.8080中的一个(微信重启后会切换端口). 2. ...
- 『运筹OR帷幄』CSDN官方账号正式上线啦| 运筹学/优化理论/人工智能/数据科学的学习交流社区
『运筹OR帷幄』四岁啦!谢谢你们陪伴我们又走过了一年.你有没有好奇跟你一样关注我们的小伙伴们都有些什么特点?比如说,大家一般都是什么学历?都居住在哪些地方?是不是从事同一个行业?有没有同一个研究方向的 ...
- 数据科学系列:plotly可视化入门介绍
导读 在入道数据岗位之初,曾系列写过多个数据科学工具包的入门教程,包括Numpy.Pandas.Matplotlib.Seaborn.Sklearn等,这些也构成了自己当初的核心工具栈.在这5个工具包 ...
- 如何从零入门数据科学?
作者:Aparna C Shastry 翻译:文婧 本文约2000字,建议阅读5分钟. 通过本文教大家如何轻松的学习数据科学以及为入门者提供一些深入学习的指导. 我相信近日90%的LinkedIn交流 ...
- Python爬虫新手入门教学(十四):爬取有声小说网站数据
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- 精通数据科学_10篇文章变得更加精通数据科学
精通数据科学 当领英发布其第三份年度新兴工作报告时 ,各地的工程师都说:"阿们". 超过一半的清单是工程角色,并且首次出现了新的领域,例如机器人技术. 但是数据科学也有很强的表现. ...
最新文章
- XenServer中Windows 7与XP多vCPU支持配置
- oracle12版本无scott解决,Oracle12C中scott账户与表问题
- android测试之monkey测试
- Nagios 3.x 在线帮助中文版
- windows10系统电脑点击睡眠没反应怎么办?
- 互换性与技术测量教材pdf_《互换性与技术测量》赵燕【pdf】
- Robotium体验----白盒
- 一个屌丝程序猿的人生(十五)
- 程序员高手和菜鸟的区别是什么?
- 微信端H5页面调用分享接口
- 小车PWM调速-串口控制
- 软件设计师之根据16进制内存地址计算内存大小(超详细)
- 蒙特卡洛方法 (Monte Carlo Method)(5)
- fatal: unable to access ‘https://github.com/NEGVS/the-economist-ebooks.git/‘: schannel: failed to re
- 春季活动策划案例合集(共25份)
- IDEA 206个快捷键 动图演示,键盘侠标配
- 用python判断是否为闰年
- OOV问题-论文笔记《Neural Machine Translation of Rare Words with Subwords Units》- ACL2016
- 无线hacking系统—wifislax
- 如何使用 Lightly 进行 Python GUI 项目开发