欢迎转载,转载时请注明来源:https://blog.csdn.net/u010967382/article/details/89490502

1.简介

pandas包括3类核心数据结构:

一维:pandas.core.series.Series

二维:pandas.core.frame.DataFrame

三维:pandas.core.panel.Panel(从0.20.0版本开始不建议使用该结构,未来将移除该结构!)

其中最核心的是Series和DataFrame。

series 和 dataframe的区别与联系:

区别:series,只是一个一维数据结构,它由index和value组成。dataframe,是一个二维结构,除了拥有index和value之外,还拥有column。

联系:dataframe由多个series组成,无论是行还是列,单独拆分出来都是一个series。

2.Dataframe常用操作代码演示

------------------------------------Part1:创建 ------------------------------------

>>> import pandas as pd

# 通过读入'\t'分割的csv文件创建dataframe,指定数据中没有表头,通过names指定表头

# 指定第0列是行索引(也可不指定,行索引就是递增数字),指定编码为utf-8

>>> dfc = pd.read_csv('/xxx/test.csv', sep='\t', header=None, names = ['man','woman'], index_col =0, encoding='utf-8')

# 以下演示基于数据集创建dataframe

>>> data = {'animal': ['cat', 'cat', 'snake', 'dog', 'dog', 'cat', 'snake', 'cat', 'dog', 'dog'],

'age': [2.5, 3, 0.5, np.nan, 5, 2, 4.5, np.nan, 7, 3],

'visits': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],

'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}

>>> labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

>>> df = pd.DataFrame(data, index=labels)

>>> df

  animal age visits priority
a cat 2.5 1 yes
b cat 3.0 3 yes
c snake 0.5 2 no
d dog NaN 3 yes
e dog 5.0 2 no
f cat 2.0 3 no
g snake 4.5 1 no
h cat NaN 1 yes
i dog 7.0 2 no
j dog 3.0 1 no

------------------------------------ Part2:索引 ------------------------------------

# 基础行索引:当索引对象是行号切片时就是行索引,不支持指定单个数字

>>> df[1:3] # 可以用负数表示倒数第几行,例如df[-3:]表示最后3行

  animal age visits priority
b cat 3.0 3 yes
c snake 0.5 2 no

>>> df['c':'f'] # 通过行标签的切片形式取出部分行

  animal age visits priority
c snake 0.5 2 no
d dog NaN 3 yes
e dog 5.0 2 no
f cat 2.0 3 no

# 基础列索引:当索引对象是列名时就是列索引

>>> df["age"]

a 2.5

b 3.0

c 0.5

d NaN

e 5.0

f 2.0

g 4.5

h NaN

i 7.0

j 3.0

Name: age, dtype: float64

# 基础列索引:索引对象也可以是列名的list

>>> df[['age', 'animal']]

  age animal
a 2.5 cat
b 3.0 cat
c 0.5 snake
d NaN dog
e 5.0 dog
f 2.0 cat
g 4.5 snake
h NaN cat
i 7.0 dog
j 3.0 dog

# 位置索引:通过 iloc 指定行、列的序号切片

>>> df.iloc[2:4,1:4] # 同时通过序号切片索引行列,也可只索引行

  age visits priority
c 0.5 2 no
d NaN 3 yes

>>> df.iloc[[1,3],[2,3]] # 通过列表格式分别指定需要取回的行和列

  visits priority
b 3 yes
d 3 yes

# 标签索引:通过 loc 指定行、列的标签列表

>>> df.loc['a', 'animal'] # 指定行、列标签取出指定位置的元素

'cat'

>>> df.loc[['a','c'], ['animal', 'visits']] # 通过行、列标签列表指定需要取出的行和列

  animal visits
a cat 1
c snake 2

>>> df.loc['a':'c', ['animal', 'visits']] # 通过行标签切片格式指定行范围

  animal visits
a cat 1
b cat 3
c snake 2

# 注意,混合索引 ix 最新版本已不再支持

------------------------------------ Part3:观察操作 ------------------------------------

# 查看dataframe形状

>>> df.shape

(10, 4)

# 查看dataframe基础信息

>>> df.info()

<class 'pandas.core.frame.DataFrame'>

Index: 10 entries, a to j

Data columns (total 4 columns):

animal 10 non-null object

age 8 non-null float64

visits 10 non-null int64

priority 10 non-null object

dtypes: float64(1), int64(1), object(2)

memory usage: 720.0+ bytes

# 查看dataframe统计数据,可为数值归一化做参考

>>> des = df.describe()

>>> des # count 总数,mean 均值,std 标准差

  age visits
count 8.000000 10.000000
mean 3.437500 1.900000
std 2.007797 0.875595
min 0.500000 1.000000
25% 2.375000 1.000000
50% 3.000000 2.000000
75% 4.625000 2.750000
max 7.000000 3.000000

>>> df.head(10) # 查看前10行

>>> df.tail(20) # 查看后20行

>>> df.index # 查看行索引

>>> df.columns # 查看列名

>>> df.values # 查看数据

>>> df.T # 行列转置

>>> df.sort_values(by='visits', ascending=True) # 根据visits列的值升序排序

>>> df.sort_index(axis=1, ascending=False) # 按列label名称降序排序

>>> df.max() # 查看各列最大值

>>> df["age"].max() # 查看age列最大值

>>> df["age"].idxmax() # 查看age列最大值的行index,注意,同功能的argmax在最新版本已不推荐使用

>>> df['age'].count() # 统计age列非NA行数

>>> df[df['age']>=3] # 查询age大于等于3的行

>>> df[(df['age']>=3)&(df['visits']==2)] # 查询age大于等于3,同时visits等于2的行

>>> df[df['age'].isin(['2.5','3.0'])] # age列的值在列表['2.5','3.0']内

------------------------------------ Part4:其它操作 ------------------------------------

>>> dataframe.dropna() # 去除所有包含np.nan的行

>>> dataframe.fillna(value=16) # 将所有的np.nan用16填充

>>> pd.isna(dataframe) # 将整个df内所有值转换为True/False,表示每个元素是否是np.nan

>>> dataframe_cp = dataframe.copy() # 复制df

# 拼接concat

>>> label = dataframe.pop('label') # 从df里取出label列创建一个Series,df里会减少该列

>>> pd.concat([df,label],axis=1) #将取出的列和现在的df拼接为之前的df,该df和之前有相同的列,知识列顺序不同

# 将归一化后的age和visits列拼接到原df右侧。注意,axis=0代表行拼接,axis=1代表列拼接

>>> pd.concat([df,df["age"]/df["age"].max(),df["visits"]/df["visits"].max()],axis=1)

# 拼接前3行和8行以后数据

>>> pd.concat([df[:3],df[8:]],axis=0)

# 将dataframe转换成numpy

>>> dataframe.to_numpy()

# 为df增加新的列

>>> s1 = pd.Series(6,index=df.index)

>>> df['s1'] = s1

# 修改指定元素的值

>>> df.at['a','s1'] = 666 # 通过行列label指定位置修改,将‘a’行,‘s1’列的元素值修改为666

>>> df.iat[1,4] = 888 # 通过行列序号指定位置修改,将第1行,第4列的元素值修改为888

>>> df.loc[:,['s1']] = 'helloworld' # 通过loc,将s1列所有值修改为‘helloworld’

>>> df.iloc[:,[4]] = 'hello' # 通过iloc,将第4列所有值修改为‘hello’

>>> df.loc[(df['animal']=='dog')&(df['age']>=5.0),['age']] = 16 # 将age>=5的dog的age全改为16

# 归一化

>>> df_norm = (df - df.min()) / (df.max() - df.min())

# 字符串操作

>>> df['animal'].str.upper() # 将animal列的str类型全变为大写,相反的,lower()是变为小写

3.重要资料

官网文档:http://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html

loc方法api文档:http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html#pandas.DataFrame.loc

pandas速查表中文版(非最新版本,仅供参考):

【基础版】

【进阶版】

【甘道夫】Pandas 基础知识总结相关推荐

  1. 用Python与Watson,将《魔戒》甘道夫的性格可视化!

    全文共4301字,预计学习时长9分钟 图源Unsplash,由Marko Blažević提供 著名心理学家詹姆斯· 彭内贝克曾说:"仔细观察人们通过语言表达思想的方式,会感受到他们的性格特 ...

  2. 整理了100道关于Python3基础知识的练习题,记得收藏

    100道关于Python3基础知识的练习题 实例1.数字组合 实例2.个税计算 实例3.完全平方数 实例4.这天第几天 实例5.三数排序 实例6.斐波那契数列 实例7.copy 实例8.九九乘法表 实 ...

  3. 【甘道夫】MapReduce实现矩阵乘法--实现代码

    之前写了一篇分析MapReduce实现矩阵乘法算法的文章: [甘道夫]Mapreduce实现矩阵乘法的算法思路 为了让大家更直观的了解程序运行,今天编写了实现代码供大家參考. 编程环境: java v ...

  4. 【甘道夫】Win7x64环境下编译Apache Hadoop2.2.0的Eclipse插件

    目标: 编译Apache Hadoop2.2.0在win7x64环境下的Eclipse插件 环境: win7x64家庭普通版 eclipse-jee-kepler-SR1-win32-x86_64.z ...

  5. 【甘道夫】Win7x64环境下编译Apache Hadoop2.2.0的Eclipse小工具

    目标: 编译Apache Hadoop2.2.0在win7x64环境下的Eclipse插件 环境: win7x64家庭普通版 eclipse-jee-kepler-SR1-win32-x86_64.z ...

  6. Pandas 基础知识

    目录 第二章 pandas基础 一.文件的读取和写入 1. 文件读取 2. 数据写入 二.基本数据结构 1. Series 2. DataFrame 三.常用基本函数 1. 汇总函数 2. 特征统计函 ...

  7. 【甘道夫】HBase随机宕机事件处理 JVM GC回顾

    一.引言 本文记录了困扰团队两周的HBase随机宕机事件的解决方案,并回顾了JVM GC调优基础知识,供各位参考. 欢迎转载,请注明出处: http://blog.csdn.net/u01096738 ...

  8. 【甘道夫】Geohash基础应用By Python

    介绍Geohash基础概念的文章很多,我就不拷贝粘贴了,我只用最简单的理解概括: Geohash用作坐标的索引,可大幅提升搜索坐标相关数据的效率.结合相邻9宫格的geohash,可以快速检索指定坐标附 ...

  9. python-数据分析-pandas基础知识

    文章目录 1.Series和DataFrame基础操作 添加列数据 添加行数据 删除行列 Series和DataFrame数据计算 按行列排序 2.Series和DataFrame切片 3.数据的读取 ...

最新文章

  1. linux下,redis 3.2.1双节点集群安装部署
  2. 我的Java开发学习之旅------Java经典排序算法之二分插入排序
  3. OS- -文件系统(三)
  4. phpstud如何安装mysql新版_phpstudy 升级mysql版本
  5. MIP技术交流分享(3月9日)
  6. 设置devenv命令的启动版本
  7. GitHu的诞生记 转 https://blog.csdn.net/fanpeihua123/article/details/58151161
  8. 【java】JDK8的HashMap
  9. linux交换分区swap分区的构建
  10. 利用python对图像进行傅里叶变换_Python 实现图像快速傅里叶变换和离散余弦变换...
  11. 精选 | 2018年4月R新包推荐
  12. Lingo 软件的使用 数学建模 司守奎
  13. 测试环境由谁搭建?第三方软件测试环境搭建步骤流程
  14. TMS570-4-RTI_DWD看门狗
  15. 《HarmonyOS开发 – 小凌派-RK2206开发笔记》第4章 串口应用开发
  16. python语音聊天_语音聊天实现
  17. Mac电脑开启共享wifi教程
  18. 一分钟快速把一篇论文后面的参考文献全部下载下来
  19. BlenderGIS插件 城市建筑3D模型自动生成 教程
  20. linux判断文件类型是否存在脚本,shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断...

热门文章

  1. 初识-语义依存分析SDP
  2. c51单片机c语言显示矩形波,51单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程序...
  3. 小布老师OracleDBA视频合集 下载
  4. 【软件发布】临摹帖(zDrawHelp) V1.1(画像素图的辅助工具)
  5. 關於淘寶上販賣的ESET NOD32激活碼
  6. 分享几个开源的android项目的源码,基本上用androidstudio都可以编译成功
  7. 前端学习笔记之——设置文本样式
  8. iOS-申请邓白氏编码的超详细流程介绍(2017.06.12)
  9. 最新 MVTec Halcon 22/21/20 安装激活教程 3339377509@qq.com
  10. html3d空间属性,详解CSS3 3D的perspective属性