pandas有两类数据对象:dataframe和series。Series是一个带标签的一维数组,通常索引在左,值在右。dataframe是一个带标签的二维数组,可以理解成series的字典,共用索引标签。重点记录dataframe的相关用法:

一.创建dataframe

1.如下图所示,主要是要Dataframe方法结合numpy函数可快速创建,以下演示了三种不同的创建方法:

#1.创建dataframe格式

import pandas as pd

import numpy as np

df1=pd.DataFrame(np.random.randn(4,4),index=np.arange(4),columns=list('ABCD'))

df2=pd.DataFrame(np.arange(16).reshape(4,4),index=[1,2,3,4],columns=["A","B","C","D"])

df3=pd.DataFrame({"A":1,"B":2,"C":pd.date_range('20200201',periods=4),"D":pd.Series(1,index=[1,2,3,4])})

打印结果

二.查看数据

#查看数据

df1.head(1) #1查看头部第一行数据

df1.dtypes #2查看列类型

df2.columns #2查看列名

df2.to_numpy() #3用numpy方法快速查看数据

df2.describe() #4查看统计摘要

df2.T #5行列互换,转置

df2.sort_index(axis=1,ascending=False) #6按列轴大小排序

df2.sort_values(by="B") #7按列的B轴数值大小排序

1.首尾数据:head()/tail()

df1.head(1) / df1.tail(2)

2.显示索引、列名、列类型

df1.index / df1.columns / df1.dtypes

个人觉得:查看列类型在数据清洗中应该会用的比较多

image

3.查看列表数据:df2.to_numpy()

可以快速浏览dataframe对象中底层numpy数据,以numpy格式输出

4.查看统计摘要:describe()

包含NAN值统计概要,以描述数据离散和形状。其中表示所在列的:count数量,mean为均值,std为标准差,min最小值,max:最小值,20%、50%、75%为20、50、75的百分位数,50%也可以理解为中位数。

image

5.转置数据:

df2.T: 行列数据互换

image

6.按轴排序

df1.sort_index(axis=1,ascending=False)

即将表格的数据按照行、列轴上数值的大小排序后展示,当axis=1时,表示按照列轴排序,axis=0时,表示按照行轴排序,ascending为False表示按照倒序排列。

image

7.按值排序

df2.sort_values(by="B")

表示按照B轴的数值大小排序,默认为正序,可通过ascending设置倒序

image

三.筛选数据

1.按列筛选

筛选整列:df2['A'] df2.A 筛选两列:df2[['A','D']]

2.按切片筛选(按行筛选)

筛选行数据:df2[:2] ,它与标签筛选的区别在于不包含该结束点,如本例,只包行0,1的行的数据,不包含2的数据。 而标签会包行节点数据。

#按列和切片筛选数据

df2['A'] #1.按筛选列A的数据

df2[['A','D']] #1.按筛选列A、D的数据

print(df2[2:3]) #2.按索引行位置2的筛选数据

print(df2.loc[2:3])#3.用loc标签按索引行位置2、3筛选数据

image

3.按标签筛选(按行筛选)

筛选行数据:df2.loc[2:3]

筛选某几行某几列数据:df2.loc[2:3,['A','B']]

返回降维数据:df2.loc[1,['A','B']]

提取标量值:df2.loc[index2[0],'A'],其中可以将index理解为一个series。

#按标签筛选

print(df2.loc[2:3,['A','B']]) #3.用loc标签按索引行位置2、3和列A、B筛选数据

print(df2.loc[1,['A','B']]) #3.用loc标签按索引行位置1和列A、B筛选数据,返回Series一维数据

A = df2.A #df2.A与df2["A"]方法等价

print(df2.loc[A[2],'A']) #3.提取标量值,用df2.A中的标量4数据,用loc标签按索引行位置4和列A的数据,返回该位置的标量值

image

4.布尔型筛选

布尔型筛选主要是将True值的内容筛选出来,下列两例,分别是逻辑符号、isin识别数值、字符串类型的方法。

#布尔索引

df2[df2.A>8] #4.返回df2.A>8布尔值为True的筛选结果数据

df2['E']=list('jsky') #对df2中的E行赋值

df2[df2['E'].isin(list('ky'))] #4.isin函数返回字符串匹配的布尔值为True的结果

image

5.位置筛选

主要使用iloc标签通过行列不同的位置切片获取到自己期望的数据,如下:

筛选某行数据:df2.iloc[:2]

筛选某行某列数据:df2.iloc[:2,0:2]

筛选具体的数值:df2.iloc[1,1]或df2.iat[1,1]

#位置索引

print(df2.iloc[:2]) #5.筛选索引行位置0、1的数据

print(df2.iloc[:2,0:2]) #5.筛选索引行位置0、1,列位置0、1的数据

print(df2.iloc[1,1]) #5.筛选索引行位置1,列位置1的数据

print(df2.iat[1,1]) #5.筛选索引行位置1,列位置1的数据

image

四、赋值

#赋值

df2['E']="K" #按列赋值

df2.iloc[0,0]=1000 #按位置赋值

df2.at[df2.index[0],"B"]=2000 #按标签赋值

通过将数据筛选出来后,进行赋值,如下例子:

image

五、缺失值

常见的缺失值处理有两种方法:忽略缺失值dropna,对缺失值重新赋值fillna.下面将通过reindex方法创建一个新的dataframe用于练习缺失值的处理,如图所示。(reindex:重建索引可更改、输出、添加指定轴索引,返回数据副本,不更改原数据)

忽略缺失值:df4.dropna(how='any')

缺失值重新赋值:df4.fillna('5')

#缺失值

df4=df2.reindex(index=[0,1,2,3,4,5],columns=list(df2.columns)+['E'])

df4.loc[1:3,'E']=1

df4.dropna(how='any')#忽略任何一行缺失值数据

df4.fillna('5')#对含有缺失值的数据重新赋值

df4.isna()#布尔关系

image

六、运算

一般情况下,运算时排除缺失值;运算时,axis默认为0,表示按列计算;axis=1表示按行计算,pandas自动沿指定维度广播。以mean(均值)和sum(求和)为例。

#运算

print(df2.mean())

df2.sum(axis=1)

image

函数名称

说明

pd.mean()

pd.mean(0)或axis=0默认表示把dataframe的列和求平均,按行扩展;pd.mean(1)表示把dataframe的行和求平均;skipna:统计时是否排除缺失值,默认值为True

pd.sum()

pd.sum(0)默认表示把dataframe的列求和,按行扩展pd.sum(1)默认表示把dataframe的行求和

pd.count()

非NA值的数量,0表示各列计数;1表示各行的计数值

Pd.describe()

针对Series或各dataframe列计算汇总统计

pd.min()/pd.max()

最小值或最大值,0表示各列的最大值,1表示各行的最大值

pd.idxmin()/pd.idxmax()

获得到最小值或最大值的索引值,0表示各列,1表示各行

pd.quantile()

样本的分位数,0表示各列,1表示各行

pd.median()

值的算术中位数(50%分位数,2分位数,中位数),0表示各列,1表示各行

pd.mad()

根据平均值计算绝对离差,0表示各列,1表示各行

pd.var()/pd.std()

样本值的方差/标准差,0表示各列,1表示各行

pd.cumsum()

默认按照行累加,即计算当前行与前面所有行之和

七、函数Apply

apply方法应用numpy自带的函数,自定义的函数等,其中axis默认为0表示按行计算,按列广播;axis=1表示按列计算,按行广播。按详见以下案例:

#函数

print(df2.apply(lambda X: X.max()-1,axis=1))

df2.apply(np.cumsum)

df2.cumsum(axis=1)

image

其中cumsum为按行累加,等价于df2.cumsum()方法,表示计算当前行与前面所有行之和。图上例子表示的正是按行累加,按列广播的效果。

八、直方图

直方图在统计学里表示数据的分布的趋势,通常用它来表示数据的变化趋势,在pandas中可以用value_counts()来表示series数据的出现频次,用mode()表示series和dataframe中的不重复的数据。

image

image

九、字符串的处理

1.字符串类型的定义:使用astype("string")方法,或在创建pandas对象时定义,如:dtype="string"或dtype=pd.StringDtype()

2.常见的字符串的处理有:str方法只适合series数据

去除空格【str.strip()、str.lstrip()、str.rstrip()】,大小写转换【str.lower()、str.upper()】,

字符串长度【str.len()】、统计字符串a出现的次数【str.count("a")】,是否是数字的布尔判断【str.isdigt()】、是否与某个字符串a匹配的布尔判断【str.match("a")】

十、合并(concat/merge/append)

1.结合-concat

把多串数组或Series组合在一起,成为dataframe

#合并-结合concat

df4=pd.DataFrame(np.random.randn(10,4))

pieces=[df4[:3],df4[3:7]]

pd.concat(pieces)

image

2.连接-merge

将两个表的数据连接在一起,有点像sql中的inner..join..的用法,根据连接关键字段将两个表的数据连接一起呈现,如下图所示

#连接join用法-merge,有点类似数据库的跨表查询

left=pd.DataFrame({"name":['Amily',"Jack"],"Country":["US","Canada"],"year":[12,22]})

right=pd.DataFrame({'name':["Amily","Amily"],"join_time":['2020-01-02',"2020-02-01"]})

print(left,"\n\n",right)

pd.merge(left,right,on="name")

image

3.追加-append

将一个数组,series或dataframe表格添加到另外一个dataframe表格上,如下图所示,注意:当数组和series追加是添加行数据,按照列的位置填入,若有超出的列或不足的列位置,用NA(np.nan、none)表示;当追加的数据是dataframe时,将会匹配列名,若无法匹配,则直接添加为新列,如下图所示

#追加append

df4.append(df2["B"])

df4.append(df2[["B","C"]])

image

十一、分组(groupby)

通过groupby()可以将dataframe中的某一列按类别分组,结合运算函数比如sum(),count()等函数就可以实现将表格按照分组计算的功能

image

十二、重塑和堆叠(stack)

Dataframe具有多重索引的功能,利用MultiIndexf方法可定义多个索引。而stack是将DataFrame的列标签压缩为行标签,unstack()而是将多个行标签转换为列标签,其中unstack(0),unstack(1)表示从顶级行标签到末级行标签进行转换。

image

image

十三、数据透视表

运用pd.pivot_table()方法可以对二维数据中的数据,按照需求快速建立新表,进行按照各维度快速分类计算,结合运算函数的方法,以便更好的了解数据规律。其中values为透视表中用来作为计算和展示的数据。

image

十四、时间序列(timeseries)

主要通过pd.to_timedate和pd.date_range将普通数据转化为时间类型的数据,生成时间类型的标量数据,在pandas中进行时间相关的计算。简单用法如下:

#转化其他类型的数据为时间戳

t1=pd.to_datetime(['2010-01-10','Jul 31, 2009','2020/10/1'])

t2=pd.to_datetime(pd.Series(['2020-02-10','Jul 31, 2009','2020/10/1']))

t3=pd.to_datetime("2020.10.1")

#date_range的defalut-freq

t12=pd.date_range(start="2020-01-01",periods=10)

十五、类别型(Categoricals)

1.astype("category):创建类别型的series数据

2.series.cat.categories:修改现有series中的类别名称

3.series.cat.set_categories:生成新的series类别名称

4.sort_values排序,是按照生成类别时的位置顺序来排的

4.groupby按类分组,如果空值的类也会显示出来,显示为0,如图

#类别型数据

#astype("category")创建类型数据

df=pd.DataFrame({"id":[1,2,3,4,5,6],

"raw_grade":["a","a","b","b","b","d"]})

#1.创建新的grade类,并对这个新的类按照raw_grade赋值,并将数据类型改

df["grade"]=df['raw_grade'].astype('category') 为category类型

print(df["grade"]) #打印该列出来,可以看到dtype为category类型,及其具体的类型值 :Categories (3, object): [a, b, d]

#2.修改类型数据中的分类名称

df["grade"].cat.categories=["very good","good","very bad"] #series.cat.categories对grade列中的类别名称进行重定义

#3.建立grade1列使用Series.cat.set_categories方法将建立新类

df["grade1"]=df["grade"].cat.set_categories(["very bad","bad","very good","good"])

print(df["grade1"])#筛选该列series出来有4类,即定义的4类:Categories (4, object): [very bad, bad, very good, good]

#4.这里排序,是按照生成类别时的位置顺序来排的

print(df.sort_values(by="grade1") )

#5.分组的类如果有控制也会显示出来,显示为0

print(df.groupby("grade1").count())

用法打印结果

十六、可视化(plot)

#可视化

ts=pd.Series(np.random.randn(1000),index=pd.date_range("2018.01.01",periods=1000))

ts=ts.cumsum()

ts.plot() #plot绘制series的图形

#Dataframe绘制plot图表

df10=pd.DataFrame(np.random.randn(1000,4),index=pd.date_range("2018.01.01",periods=1000),columns=list("ABCD"))

df10 = df10.cumsum()

df10.plot()

Series和dataframe使用plot生成的图形

十七、数据输入 / 输出

1.CSV文件的读写:

#读取 CSV 文件数据:

pd.read_csv('foo.csv')

#写入CSV文件:

df10.to_csv('foo.csv')

2.Excel文件的读写:

#读取 Excel文件数据:

pd.read_excel('foo.xlsx',“sheet1”,index_col=None, na_values=['NA'])

#写入Excel文件:

df10.to_excel('foo.xlsx', sheet_name='Sheet1')

3.读取HDF5文件:HDF5是一种跨平台数据储存文件

#读取 HDF5文件数据:

pd.read_hdf('foo.h5', 'df')

#写入HDF5文件:

df.to_hdf('foo.h5', 'df')

pandas自动创建文件夹_pandas快速入门相关推荐

  1. 【Unity3D小功能】Unity3D中在创建完项目后自动创建文件夹列表

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  2. java 当文件夹不存在时,自动创建文件夹

    public static void main(String[] args) {// 可以是任意格式的文件String pathName = "D:\\img\\immm\\test2.tx ...

  3. linux 根据文件路径自动创建文件夹

    [root@hadoop henhao]# file="hongrao/expedia/egencia/accountdim.txt" [root@hadoop henhao]# ...

  4. C++写日志源代码分析,可实现根据日期自动创建文件夹、日志分类、文件大小控制等

    最近在做一个项目,使用C++写一个动态链接库(dll),里面需要有日志功能,于是参考网上的资料实现了C++写日志的功能.日志可以指定路径保存,也可以默认保存在当前可执行程序(exe)所在的文件夹.现在 ...

  5. 自动创建文件夹 pictureBox 显示图片 并调用系统窗体打开文件夹

    设置pictureBox1 图片自适应: SizeMode:StretchImage BackgroundImagelayout : Stretch; 点击打开文件效果如下: 代码实现: using ...

  6. python文件夹如果不存在自动创建文件夹

    dir_name = 'mart/mart1' import os if not os.path.isdir(dir_name):os.makedirs(dir_name)# os.mkdir()创建 ...

  7. php 自动创建文件,php:自动创建多级文件夹

    /** * 函数说明 * is_dir:判断给定文件名是否是一个目录,如果是返回ture,如果不是返回false * dirname:返回路径中的目录部分,本函数返回去掉文件名后的目录名.比如$pat ...

  8. linux 代码获取当前路径,【linux】shell代码,获取当前路径,创建文件夹

    Linux学习笔记:mkdir创建文件夹 文件夹,即目录,在linux中使用mkdir创建. 语法:mkdir dir_name 通过 mkdir 命令可以实现在指定位置创建以 dir_name(指定 ...

  9. 快速批量创建文件夹、文件的快捷键

    1.快速创建文件夹 我们需要做模块快速搭建相应的页面和路由 ├── dashboard # 首页 ├── login # 登录 ├── 404 # 404 ├── departments # 组织架构 ...

最新文章

  1. python 判断中文标点符号_Python入门编程题库27--生成随机密码
  2. Hyper-V安装(摘自本站)
  3. containerd和docker技术的比较
  4. 创建表名作为参数的mysq存储过程【procedure】
  5. myeclipse配置java8_MyEclipse 2017配置Tomcat8
  6. AutoHotKey在魔兽中显示文字或图片
  7. python简单爬虫代码-使用Python3.5写简单网络爬虫
  8. python画图如何调整图例位置_Python——legend()图例位置调整
  9. 致远OA_0day批量植Cknife马一步到位
  10. 动态加密?看我如何见招拆招爬取某点评全站内容!
  11. ClickHouse S3 外表调研
  12. 介绍一个可以把安卓手机屏幕投影到电脑上的办法
  13. 工行网银网上支付 提示选择证书,但下拉框是空白,无法选择导致不能支付 解决办法
  14. 随机的力量(1) - The power of random two choices
  15. 算法编程10:岛屿的最大面积
  16. 带你玩东方外传系列一 ~ 十游戏链接
  17. 又有2名博士入选华为“天才少年”!学霸日常科研计划表曝光
  18. html如何自己做一个背景特效,背景效果实现方法总结
  19. H3C服务器配置raid
  20. 深度解析FPS游戏外挂+解决方案

热门文章

  1. 我的家庭私有云计划-2
  2. list最大容量_Java 基础(四)集合源码解析 List
  3. SP2-0734: 未知的命令开头 imp scott/... - 忽略了剩余的行。
  4. linux df命令无反馈,Linux-df命令
  5. php mysql 排序规则_php 数组排序以及按照某个字段排序
  6. python使用ssh 中文_Python3制作简易SSH登录工具
  7. 进度条设置_为你的练习设置进度条
  8. 火狐 移动 html 元素,python中的Firefox+Selenium:如何交互式地获取元素html?
  9. strictmath_Java StrictMath nextUp()方法与示例
  10. json转string示例_C.示例中的String.Copy()方法