Pandas Learning
Panda Introduction
- Pandas 是基于 NumPy 的一个很方便的库,不论是对数据的读取、处理都非常方便。常用于对csv,json,xml等格式数据的读取和处理。
- Pandas定义了两种自己独有的数据结构,Series 和 DataFrame。
Series
Series可以理解为竖着的列表。
(Ps:Series中元素可以是任意类型)index | data---|---0 | XiaoWang 1 | XiaoLin
- Series比较常用的定义方式有如下几种
传入列表定义Series
s = Series([66,'score','scout','fbricate'])
传入字典定义Series
s = Series({'No1':66,'No2':'score','No3':'scout','No4':'fbricate'})
- 比较常用的属性和方法
S.values 可以显示Series对象的数据值
s = Series({'No1':66,'No2':'score','No3':'scout','No4':'fbricate'}) print(s.values)
S.index 可以显示Series对象的索引
s = Series({'No1':66,'No2':'score','No3':'scout','No4':'fbricate'}) print(s.index)
- 判断是否为空
- pd.isnull(series对象)
- pd.notnull(series对象)
- Series 对象.isnull()
- Series 对象.index = []
可以重新定义索引的名字
s = Series({'No1':66,'No2':'score','No3':'scout','No4':'fbricate'}) s.index=['no1','no2','no3','no4'] print(s)
- Series自定义索引机制(索引不仅可以是数字)
- 实际实现:数据值和自定义索引分别对应于两个列表,新索引自动指向于相应旧索引指向的数据值实现“自动对齐”。
- 利用已经生成的Series创建新的Series,并且尝试传入原本不存在的索引
s = Series({'No1':66,'No2':'score','No3':'scout','No4':'fbricate'}) s1 = Series(s,index= ['No1','No2','No3','No4','No5']) print(s1)
Ps:数据不存在用NaN表示。 当旧的索引不在新定义的索引中,则该数据项自动剔除,不进入新的Series中,索引对应可以看成是新的对旧的数据的一种筛选或者添加。
s = Series({'No1':66,'No2':'score','No3':'scout','No4':'fbricate'}) s1 = Series(s,index= ['No1','No2','No4','No5']) print(s1)
- Series相关运算
- 筛选符合条件的数据,返回一个新的Series
s = Series({'No1':66,'No2':70,'No3':-2,'No4':3}) s1 = s[s > 0] print(s1)
对Series进行普通加减乘除以及平方等任何运算都是针对Series里所有数据的
s = Series({'No1':66,'No2':70,'No3':-2,'No4':3}) s1 = s**2 print(s1)
- 用in判断某索引或者数据值是否在Series中
判断索引(直接查询对象默认是查询键值)
s = Series({'No1':66,'No2':70,'No3':-2,'No4':3}) print(66 in s) print('No1' in s)
判断键值(应在s.values中查找)
s = Series({'No1':66,'No2':70,'No3':-2,'No4':3}) print(66 in s.values)
两个Series之间的运算(只把具有相同索引的值进行运算,而不是共有的索引都赋值为NaN)
s1 = Series({'No1':66,'No2':70,'No3':-2,'No4':3}) s2 = Series({'No1':4,'No2':0,'No5':-2,'No4':67}) print(s1 + s2)
---
- 筛选符合条件的数据,返回一个新的Series
DataFrame
DataFrame 是一种二维的数据结构,与电子表格非常像,竖行为columns,横行为index。每一列可以理解为由一个Series构成。如下:
None column0 column1 index0 index1 - 定义方式
传入字典定义DataFrame
data = {"name":["Mark","Mike","Michel"],"age":[21,22,23],"favorite":["basketball","game","computer"]} df = DataFrame(data) # df = DataFrame(data,columns=['age','name','favorite']) 可以规定显示键(columns)的顺序 print(df)
自定义索引(默认为0,1,2等整数)
df = DataFrame(data,index=["No1","No2","No3"])
采用“字典套字典”的方式定义DataFrame
data = {"name":{"No1":"Mark","No2":"Mike","No3":"Michel"},"age":{"No1":21,"No2":22,"No3":23},"favorite":{"No1":"basketball","No2":"game","No3":"computer"}} df = DataFrame(data) print(df)
- 属性方法和常用操作
- DataFrame.columns,能够显示素有的 columns 名称。
print(df.columns)
- DataFrame.index,获得行索引信息
- DataFrame.shape,获得df的size
- DataFrame.shape[0],获得df的行数
- DataFrame.shape[1],获得df的列数
- DataFrame.values,获得df中的值
得到某竖列(可以理解为一个Series)的全部内容。
print(df['name'])
索引某几行
#索引前3行 df[:3]
可利用loc/iloc/ix索引函数进行索引
loc/iloc/ix 参考【1】【2】
- del df[0] 删除第0列
- df.drop(0) 删除第0行
给某一列统一赋值
# 添加某一新列并且赋初始值: df1['NewColumn'] = 0
data = {"name":{"No1":"Mark","No2":"Mike","No3":"Michel"},"age":{"No1":21,"No2":22,"No3":23},"favorite":{"No1":"basketball","No2":"game","No3":"computer"}} df = DataFrame(data) # 新增一行No4,一列 ID 和 Status。 df1 = DataFrame(df,columns=["ID","name","age","favorite","Status"],index=["No1","No2","No3","No4"]) # 为Status统一赋值yes。 df1["Status"]="yes" print(df1)
利用Series点对点添加数据(DataFrame每一列是一个Series)
# 创建ID列并且赋值 IDSeries = Series(['001','002','004'],index=["No1","No2","No4"]) df1['ID'] = IDSeries
Ps:Series的索引会与DataFrame的索引自动对齐,以此为依据定向添加数据。
DataFrame也可以单点精确的修改数据(仿照字典dict操作),比如:
df1['name']['No3'] = 'MICHEL' print(df1)
可见数据虽然是成功修改过来了,但是却报了一个SettingWithCopyWarning,其中原因是说“在DataFrame的一个切片上进行赋值操作”,虽然我也不理解在切片上进行数据处理有什么不妥,而且使用给定的索引工具loc创建新的df并进行相同操作也会报如上警告。最后看了网上找了一个比较好的解决方案是:先生成正确的Series再将整个Series插入DataFrame会更加有效。
解决方案参考
- DataFrame选择某些列或者行进行输出,生成新的DataFrame。
# 筛选 name列和age列 df2 = DataFrame(df1,columns=["name","age"]) print(df2) # 筛选No1,No2行 df3 = DataFrame(df1,index=["No1","No2"]) print(df3)
根据某列sort排序
# 按照age递减排序 print(data.sort_values(["age"],ascending=False))
- map(function)运算 传入一个函数,应用在dataframe的每一个元素上,返回一个dataframe。
- apply(function,axis)运算 对dataframe的每一列或行进行运算,返回一个Series索引为原先的columns,数据值为函数值(ps:不指定axis对列操作,指定axis=1,对行操作)。
Group by操作
参考链接
可以将dataframe导出到csv文件,to_csv方法。
df.to_csv(file_path, encoding='utf-8', index=False) # index为False表示不导出dataframe的index数据
- DataFrame.columns,能够显示素有的 columns 名称。
Summary
- 这篇博客是根据自己学习pandas库的使用过程中使用过的操作记录下来的,可能不够全面,排序也有点乱,但是后面进一步学习之后会进行补充和修改并且如果文章中有错误希望指出。
转载于:https://www.cnblogs.com/wangqinze/p/9110913.html
Pandas Learning相关推荐
- python-Matplotlib数据可视化
Matplotlib 基本属性 配置参数: 线条风格linestyle或ls 线条标记 颜色 背景色 应用 (iris为例) Matolotlib 数据可视化 三维图形简介 基本属性 Matplotl ...
- 干货!整理了50个 Pandas 高频使用技巧,强烈建议收藏!
作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编来分享在pandas当中经常会被用到的方法,篇幅可能有点长但是提供的都是干货,读者朋友们看完之后也可以点赞收藏,相信会对大家有所帮助,大致本文会 ...
- Machine Learning | (8) Scikit-learn的分类器算法-随机森林(Random Forest)
Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...
- Machine Learning | (4) Scikit-learn的分类器算法-逻辑回归
Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...
- Re:从零开始的机器学习 - Machine Learning(一) 线性回归
从我对整个职业生涯的规划出发,我不仅想做一些高质量的应用(软件工程的角度),还想做一些激动人心的应用,所以我希望能在机器学习的方向走,尽管我在大学粗浅的学了些皮毛,但如果要把机器学习作为职业发展的话这 ...
- Python Tools for Machine Learning
2019独角兽企业重金招聘Python工程师标准>>> 原文:https://www.cbinsights.com/blog/python-tools-machine-learnin ...
- 机器学习案例学习【每周一例】之 Titanic: Machine Learning from Disaster
下面一文章就总结几点关键: 1.要学会观察,尤其是输入数据的特征提取时,看各输入数据和输出的关系,用绘图看! 2.训练后,看测试数据和训练数据误差,确定是否过拟合还是欠拟合: 3.欠拟合的话,说明模 ...
- 基于deep learning的快速图像检索系统
深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统 作者:寒小阳 时间:2016年3月. 出处: 声明:版权所有,转载请联系作者并注明出处 1.引言 本系统是基于CV ...
- The Wide and Deep Learning Model(译文+Tensorlfow源码解析) 原创 2017年11月03日 22:14:47 标签: 深度学习 / 谷歌 / tensorf
The Wide and Deep Learning Model(译文+Tensorlfow源码解析) 原创 2017年11月03日 22:14:47 标签: 深度学习 / 谷歌 / tensorfl ...
- 基于deep learning的快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval)
基于deep learning的快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval) 2016-07-25 14 ...
最新文章
- 使用模式创建一个面向服务的组件中间件
- 《LeetCode力扣练习》剑指 Offer 06. 从尾到头打印链表 Java
- 用C++11 实现 thread pool
- 利用python爬虫(part5)--lxml模块
- 使用to like动词_17
- 计算机专业盲打,在win7系统电脑练习盲打的方法
- 030-sysctl
- ubuntu10.04 NFS服务
- 深圳大学计算机与软件学院李志,李志彬
- MongoDB整理笔记のGUI操作
- .NET C# + ECharts 初学笔记 后台加载统计图表数据 - 简单示例
- 搜狗新闻语料库,构建Word2Vec中文词向量
- java“的注脚_百度得到的数据如何写脚注
- scada与MySQL连接_SCADA系统数据库连接功能设计及应用
- 知网查重学术不端文献检测系统查不查公式和图表文字
- Python对齐显示||tabulate函数||wcwidth模块||知道这些就够了
- 第八届省赛——D.引水工程)
- 【支付】uniapp之app中的支付宝、微信支付的实现及orderInfo的说明
- av_seek_frame的调用
- 美元指数站稳脚跟,下周耶伦再掀风暴
热门文章
- php 26进制转10进制,PHP 10进制转62进制
- C++:vector二维数组初始化
- unix编程实训教程之 more(觉醒篇一 Begin)
- web的demo制造_简单的C++图像算法web端Demo制作
- 【2019杭电多校第八场1011=HDU6667】Roundgod and Milk Tea(贪心)
- 4g网络切换软件_游戏掉线坑队友?OPPO Reno网络切换超快,上分吃鸡更稳
- activity 工作流_智能风控决策引擎系统可落地实现方案(二)决策流实现
- 存不存行李寄存平台_行李寄存柜和行李寄存平台的区别
- c语言打印字符数据在屏幕上,在屏幕上输出各种类型的数据
- Docker Kubernetes k8s 从入门到精通 阿里云实战命令