目录

  • pandas数据结构
    • 创建Series数据
    • 创建DataFrame数据
  • pandas的索引操作
    • 重新索引
    • 更换索引
    • 索引选取
      • 选取行
      • 选取列
      • 布尔选择
    • pandas的增删改
      • 增加行或列
      • 删除行或列
      • 修改行或列索引标签
  • pandas的运算
    • 算术运行
    • 函数
    • 排序
    • 汇总统计
  • pandas的简单可视化
    • 线形图
    • 条形图
    • 直方图&密度图
    • 散点图

pandas数据结构

pandas有两个基本数据结构:Series,DataFrame
Series类似一维数组,不同的是他是由一组数据和一组索引组成。
DataFrame是python数据分析最常用的,所以不管创建的数据或外部的数据,我们都会想办法将其转换为DataFrame数据


创建Series数据

通过Series函数,输入列表数据作参可以创建最简单的Series数据

from pandas import Series,DataFrame
import pandas as pd
obj1=Series([1,-2,3,-4])
obj2=Series([1,-5,-9,8],index=['a','b','c','d'])
#可以指定索引来创建Series
print(obj1)
print(obj1.shape)
print(obj1.ndim)
print(obj1.size)

运行结果如下:

也可以通过字典创建Series数据

from pandas import Series,DataFrame
data={'bob':98,'john':86,'mike':70,'tony':100
}
obj=Series(data)
obj.name='math'
#Series对象可以重命名
obj.index.name='student'
#索引可以重命名
print(obj)

运行结果如下:

创建DataFrame数据

创建DataFrame数据的方法有很多,最常用的就是传入由数组ndarray,列表list或元组tupe组成的字典,实例如下

import numpy as np
from pandas import Series,DataFrame
import pandas as pd
data={'name':['ZhangSan','LiSi','WangWu','XiaoMing'],'sex':['female','male','female','female'],'year':[2001,2002,2005,1999],'city':['Beijing','Shanghai','Guangzhou','Beijing']
}
df=DataFrame(data,columns=['name','sex','year','city'], index=['a','b','c','d'])
#通过column指定列索引的顺序
print(df)

运行结果如下:

pandas的索引操作

重新索引

索引对象是无法修改的,但是可以通过reindex() 对Series数据和DataFrame数据重新索引,Series数据重新索引实例如下:

import numpy as np
from pandas import Series,DataFrame
import pandas as pd
obj1=Series([1,-2,3,-4],index=[0,2,3,5])
print(obj1)
obj2=obj1.reindex(range(6),method='ffill')
#method表示填充方法,参数可以设置ffill前填充,bfill后填充
print(obj2)

运行结果如下:

DataFrame数据也可以对行索引,列索引 重新索引

df1=DataFrame(np.arange(9).reshape(3,3),index=['a','b','d'],columns=['name','id','sex'])
print(df1)
df2=df1.reindex(['a','b','c','d'],fill_value=0)
#fill_value可以指定填充值
#重新索引columns需要在新索引前加columns=['name','city','sex']
print(df2)

运行结果如下:

更换索引

可以通过set_index(‘columns’)来将列数据作为行索引,实例如下:

df1=DataFrame(np.arange(9).reshape(3,3),index=['a','b','d'],columns=['name','id','sex'])
print(df1)
df2=df1.set_index('name')
print(df2)
#可以通过df2.reset_index()重新恢复

运行结果如下:

索引选取

在pandas中数据选取都是通过索引完成,所以这个内容很重要。

选取行

series数据选取可以索引位置或者索引标签进行
[0] 第1行
[0:2] 第1-2行(左闭右开)
[‘a’] 索引标签为a的行
[‘a’:‘d’]索引标签为a-d的行(左闭右闭)

obj=Series([1,-5,-9,8],index=['a','b','c','d'])
print(obj)
obj[['c','d']]=[23,15]
print(obj[['c','d']])

运行结果如下:

DataFrame数据除了像Series数据那样选取行外,还可以通过loc[ ’ ’ ] 或者iloc[ ‘ ’ ]选择单独行

print(df)
print(df.loc['a'])
#loc['']输入的参数是行索引标签
print(df.iloc[[1,3]])
#iloc[[]]输入的参数是行索引位置

运行结果如下:

选取列

通过一个中括号[ ]输入索引标签,如df[‘name’]可以单独选择某列
通过两个中括号[[ , ]]输入多个索引标签,如df[[‘name’,‘sex’,‘city’]]可以选择多列
!!切片用于选取行数据,不能选取列

df=DataFrame(data,columns=['name','sex','year','city'], index=['a','b','c','d'])
print(df)
print(df['name'])
print(df[['name','sex']])

运行结果如下:

布尔选择

布尔选择用于选择特定值,类似excel中的筛选功能,常用符号等于==
不等于!=
负号-
和&
或 |

print(df)
print([df['sex']=='male'])
print(df[df['sex']=='male'])

运行结果如下:

pandas的增删改

增加行或列

原数据上增加行数据可以通过append函数传入字典

print(df)
new_data={'name':'Bob','city':'Nanjing','sex':'male','year':2003
}
df=df.append(new_data,ignore_index=True)
#Can only append a Series if ignore_index=True or if the Series has a name
print(df)

运行结果如下:

增加列信息更为简单,不需要什么函数,直接传入新列表or数值即可

print(df)
df['math']=[50,80,78,96,85]
#用数值传入也可以,如df['math']=100
print(df)

运行结果如下:

删除行或列

通过drop函数

print(df)
new_drop=df.drop('year',axis=1)
#删除列指定列索引标签,指定axis=1
print(new_drop)

运行结果如下:

修改行或列索引标签

print(new_drop)
new_drop.rename(index={0:'a',1:'b'}, columns={'math':'Math'},inplace=True)
#区别与set_index
print(new_drop)

运行结果如下:

pandas的运算

算术运行

pandas数据对象在算术运算时,如果有相同索引(index&column)则进行算术运算,如果有没有则引入缺失值。

df1=DataFrame(np.arange(9).reshape(3,3),columns=['a','b','c'],index=['apple','tea','milk'])
print(df1)
df2=DataFrame(np.arange(9).reshape(3,3),columns=['a','b','c'],index=['apple','tea','coco'])
print(df2)
print(df1+df2)
#必须行索引和列索引都相同才进行运算,否则填入NaN

运行结果如下:

函数

定义好的函数可以用于pandas数据中,这是一个数据分析常用的工具;一般有三种方法:

函数 用法
map函数 套用在series(列)中的每个元素
apply函数 套用在DataFrame中的行与列
applymap函数 套用在DataFrame中的每个元素

下面是实例:

data={'fruits':['apple','orange','banana','grape'],'price':['25元','30元','18元','45元']
}
#需要把price中的元去掉
df1=DataFrame(data)
print(df1)
def f(x):return x.split('元')[0]
df1['price']=df1['price'].map(f)
#f(x)输入X,返回去除’元‘的数值。利用map函数将f(x)应用到price列中的每一个元素
print(df1)

运行结果如下:

applymap和map都是应用与每个元素,数据分析操作常用到

df=DataFrame(np.random.randn(3,3),columns=['a','b','c'],index=['win','mac','app'])
print(df)
df1=df.applymap(lambda x:'%.2f'%x)
#lambda是一个匿名函数,x为lambda的参数,并作:后的运算
#applymap可以用于DataFrame中的每个元素,可以批量处理数据
print(df1)

运行结果如下:

排序

数据分析中常需要对某列数据排序,然后取前几位
用df.sort_values(by=‘column’, ascending=False/True)
实例如下:

data={'name':['Bob','Mike','Tony','Jany','White'],'city':['Beijing','US','Shanghai','Guangzhou','Shunde'],'Math':[80,90,88,58,100]
}
df=DataFrame(data).set_index('name')
print(df)
print(df.sort_values(by='Math',ascending=False)[:2])

运行结果如下

汇总统计

汇总统计也在数据分析实际用很多,比如求唯一值,值出现次数统计,求和等等

df=DataFrame(np.random.randn(9).reshape(3,3),columns=['a','b','c'])
print(df)
print(df.sum())
#默认axis=0按行方向求和,可以传入axis=1作参

运行结果如下:

df.value_counts()可以统计每个值出现的次数

print(df)
print(df['Math'].value_counts())

运行结果如下:

在Series数据中(如果是DataFrame需要先选取一列),通过unique获取不重复的数组,输出是ndarray格式

print(df)
print(df['Math'].unique())
#'DataFrame' object has no attribute 'unique',需要先选取某列才能用unique

运行结果如下:

pandas的简单可视化

pandas中集成matplotlib中的基础组件,可以快速绘图用以检查异常数据,

线形图

通过df.plot()
plt.show()可以绘制折线图

df=DataFrame({'normal':np.random.normal(size=100),'gamma':np.random.gamma(1,size=100),'poisson':np.random.poisson(size=100)})
df1=df.cumsum()
print(df1)
df1.plot()
#画折线图,如果是DataFrame格式则会为每一列绘制一条线;也可以指定列进行绘图
plt.show()
#打印折线图

图像如下:

条形图

df.plot()中传入kind=‘bar’ or kind='barh’函数即可绘制柱状图,水平柱状图

df=DataFrame(data,columns=['name','sex','year','city'], index=['a','b','c','d'])
print(df)
df['sex'].value_counts().plot(kind='bar')
#这个选取列数据,统计值频次,画图的方法常用
plt.show()

图像如下:

直方图&密度图

直方图和密度图都可以用于统计数值分布,在pandas中
直方图 : s.hist (bins=, grid=True/ False) 其中bins是将值分成多少段,grid是网格线
密度图 : s.plot( kind= ‘kde’)
注意的是直方图和密度图都是针对一列数据或series数据

散点图

散点图 s.plot( kind= ‘scatter’ )
实例如下:

df=DataFrame(np.arange(10), columns=['x'])
df['y']=2*df['x']+5
print(df)
df.plot(kind='scatter',x='x',y='y')
plt.show()

图像如下:

写在最后:本文记录《从零开始学python数据分析》-罗攀编著 的个人学习笔记,供linlin和大家查阅,有误请指正。

【学习笔记】python数据分析-Pandas相关推荐

  1. python绘制直方图的函数_(六)pyplot基础图表函数(学习笔记)|python数据分析与展示...

    1.pyplot基础图表函数概述 2.pyplot图饼的绘制 3.pyplot直方图的绘制 4.pyplot极坐标图的绘制 5.pyplot散点图的绘制 6.单元小结 [网页链接[Python数据分析 ...

  2. 学习笔记-python数据分析-环境配置

    系统win10 64位 miix5 512G 由于装双系统比较复杂,且miix在网上还没有发现成功的案例(本身就小众,即便ubuntu是通用的系统,也会存在驱动的问题) 1.安装最新版python3. ...

  3. python数据挖掘学习笔记】十.Pandas、Matplotlib、PCA绘图实用代码补充

    #2018-03-23 18:56:38 March Friday the 12 week, the 082 day SZ SSMR https://blog.csdn.net/eastmount/a ...

  4. Python数据分析pandas之多层高维索引

    Python数据分析pandas之多层高维索引 DataFrame多层索引 多层索引简介 众所周知Pandas的Series和DataFrame存放的是一维和二维数组,那么想存放多维数组就得通过多层索 ...

  5. Python数据分析——Pandas基础:dt.datetime与pivot_table()数据透视表

    系列文章目录 Chapter 1:创建与探索DF.排序.子集化:Python数据分析--Pandas基础入门+代码(一) Chapter 2:聚合函数,groupby,统计分析:Python数据分析- ...

  6. Python数据分析pandas之分组统计透视表

    Python数据分析pandas之分组统计透视表 数据聚合统计 Padans里的聚合统计即是应用分组的方法对数据框进行聚合统计,常见的有min(最小).max(最大).avg(平均值).sum(求和) ...

  7. Python数据分析pandas之数据拼接与连接

    Python数据分析pandas之数据拼接与连接 数据拼接处理 数据拼接处理指的是numpy.pandas里对数据的拼接.连接.合并等多种方法的概称.有时我们处理的数据会分很多步骤,而中间或者最终的结 ...

  8. Python数据分析pandas之dataframe初识

    Python数据分析pandas之dataframe初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上 ...

  9. Python数据分析pandas之series初识

    Python数据分析pandas之series初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上,它通 ...

  10. 二维码学习笔记(二) | 数据分析与数据编码

    唠唠闲话 二维码笔记系列(原文地址): 『二维码学习笔记(一) | 二维码概述』 『二维码学习笔记(二) | 数据分析与数据编码』 『二维码学习笔记(三) | 纠错编码』 『二维码学习笔记(四) | ...

最新文章

  1. Visual Studio Code 常用快捷键
  2. Android 搜索框 search dialog 和 search widget
  3. pyqt5教程12:拖放功能
  4. [粉丝福利]--感谢你们关注!
  5. 唐尼vr眼镜好吗_裸眼3DVR和全息投影有什么区别 他们之间谁更好一些
  6. Ubuntu 18.04/18.10快速开启Google BBR的方法
  7. php怎么防止爬虫,PHP语言学习之php 防止爬虫设置
  8. 傅里叶变换和拉普拉斯变换
  9. matlab怎么画两个自变量的图_er图怎么画?轻松绘制专业er图的软件
  10. c语言同余法随机数,线性同余法取随机数
  11. android录屏直播方案,安卓手机录屏直播软件怎么用?
  12. Axure插件axure-chrome-extension安装
  13. 微信小程序60s倒计时
  14. 关闭chrome 的内置PDF 查看器
  15. workerman php使用,workerman怎么用
  16. Java jsp导出Excel打开报格式或扩展名错误
  17. 极速office(excel)如何查找出重复内容
  18. Perl-Can't locate Time/HiRes.pm 错误
  19. PTA-520钻石争霸赛题解【c/c++ 完整思路+代码】
  20. 【愚公系列】2022年10月 微信小程序-电商项目-确认订单功能实现

热门文章

  1. html5 2d变形过渡注意,2D变形(css3)transform
  2. 基于php731高校网上心理咨询室系统-计算机毕业设计
  3. 微信安全查询,域名被微信拦截查询
  4. ndwi是什么意思_小学英语知识集锦,太全了
  5. [Mysql] SUBSTRING函数 | SUBSTRING_INDEX函数
  6. C#中操作数据库技术之ExecuteNonQuery用法
  7. FTP服务器配置与管理
  8. 东方梦符祭 N2无尽40波通关
  9. 吃鸡武器皮肤系统上线,您想问的这里都有答案
  10. C++Static 静态函数调用非静态函数