欢迎转载,转载时请注明来源: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. 理解委托(delegate)及为什么要使用委托
  2. linux如何查看指定目录下文件内容,Linux 系统下通过关键词查找指定目录下的文件内容...
  3. Python编程基础:第三十三节 文件复制Copy a File
  4. java.lang.OutOfMemoryError​异常解决方法
  5. ASP.NET MVC中如何在客户端进行必要的判断
  6. cannot restore segment prot after reloc: Permission denied
  7. Eclipse的代码补全方法可以实现psvm和sout
  8. nsis 固定到任务栏
  9. 5.微服务设计 --- 分解单块系统
  10. mysql+1.6安装,CentOS 6.6服务器编译安装lnmp(Nginx1.6.2+MySQL5.6.21+PHP5.6.3
  11. 例2.12 今年暑假不AC - 九度教程第22题(贪心算法)
  12. webSocket 干货分享 附带项目源码
  13. Django学习笔记之form组件的局部钩子和全局钩子
  14. 硅谷的摇篮-斯坦福大学
  15. 智慧屏鸿蒙,荣耀智慧屏体验评测:鸿蒙OS首款产品,真正的智慧中心
  16. Kinect for Unity3d----KinectManager
  17. R语言用WinBUGS 软件对学术能力测验(SAT)建立层次(分层)贝叶斯模型
  18. 09丨数据采集:如何用八爪鱼采集微博上的“DG”评论
  19. uCOS-II 基础入门教程(九)
  20. 转载:“技术支持工程师”薪资行情

热门文章

  1. html text-stoke,使用text-stroke 和 text-shadow制作CSS描边文字
  2. 技术收藏之linux shell 将字符串分割成数组
  3. PHP在线考试平台管理系统源码带文字搭建教程
  4. 算法基础入门—求圆面积
  5. 浅谈端口和接口的区别
  6. 运算形式电路的分析方法——网孔电流法
  7. 涨1100w播放,150w粉!B站UP主仅入站百天竟成功出圈!
  8. Displaying Bitmaps Efficiently总结
  9. aspx文件中CodeFile与CodeBehind的区别
  10. Storm之分布式搭建