pandas自动创建文件夹_pandas快速入门
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快速入门相关推荐
- 【Unity3D小功能】Unity3D中在创建完项目后自动创建文件夹列表
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...
- java 当文件夹不存在时,自动创建文件夹
public static void main(String[] args) {// 可以是任意格式的文件String pathName = "D:\\img\\immm\\test2.tx ...
- linux 根据文件路径自动创建文件夹
[root@hadoop henhao]# file="hongrao/expedia/egencia/accountdim.txt" [root@hadoop henhao]# ...
- C++写日志源代码分析,可实现根据日期自动创建文件夹、日志分类、文件大小控制等
最近在做一个项目,使用C++写一个动态链接库(dll),里面需要有日志功能,于是参考网上的资料实现了C++写日志的功能.日志可以指定路径保存,也可以默认保存在当前可执行程序(exe)所在的文件夹.现在 ...
- 自动创建文件夹 pictureBox 显示图片 并调用系统窗体打开文件夹
设置pictureBox1 图片自适应: SizeMode:StretchImage BackgroundImagelayout : Stretch; 点击打开文件效果如下: 代码实现: using ...
- python文件夹如果不存在自动创建文件夹
dir_name = 'mart/mart1' import os if not os.path.isdir(dir_name):os.makedirs(dir_name)# os.mkdir()创建 ...
- php 自动创建文件,php:自动创建多级文件夹
/** * 函数说明 * is_dir:判断给定文件名是否是一个目录,如果是返回ture,如果不是返回false * dirname:返回路径中的目录部分,本函数返回去掉文件名后的目录名.比如$pat ...
- linux 代码获取当前路径,【linux】shell代码,获取当前路径,创建文件夹
Linux学习笔记:mkdir创建文件夹 文件夹,即目录,在linux中使用mkdir创建. 语法:mkdir dir_name 通过 mkdir 命令可以实现在指定位置创建以 dir_name(指定 ...
- 快速批量创建文件夹、文件的快捷键
1.快速创建文件夹 我们需要做模块快速搭建相应的页面和路由 ├── dashboard # 首页 ├── login # 登录 ├── 404 # 404 ├── departments # 组织架构 ...
最新文章
- python 判断中文标点符号_Python入门编程题库27--生成随机密码
- Hyper-V安装(摘自本站)
- containerd和docker技术的比较
- 创建表名作为参数的mysq存储过程【procedure】
- myeclipse配置java8_MyEclipse 2017配置Tomcat8
- AutoHotKey在魔兽中显示文字或图片
- python简单爬虫代码-使用Python3.5写简单网络爬虫
- python画图如何调整图例位置_Python——legend()图例位置调整
- 致远OA_0day批量植Cknife马一步到位
- 动态加密?看我如何见招拆招爬取某点评全站内容!
- ClickHouse S3 外表调研
- 介绍一个可以把安卓手机屏幕投影到电脑上的办法
- 工行网银网上支付 提示选择证书,但下拉框是空白,无法选择导致不能支付 解决办法
- 随机的力量(1) - The power of random two choices
- 算法编程10:岛屿的最大面积
- 带你玩东方外传系列一 ~ 十游戏链接
- 又有2名博士入选华为“天才少年”!学霸日常科研计划表曝光
- html如何自己做一个背景特效,背景效果实现方法总结
- H3C服务器配置raid
- 深度解析FPS游戏外挂+解决方案
热门文章
- 我的家庭私有云计划-2
- list最大容量_Java 基础(四)集合源码解析 List
- SP2-0734: 未知的命令开头 imp scott/... - 忽略了剩余的行。
- linux df命令无反馈,Linux-df命令
- php mysql 排序规则_php 数组排序以及按照某个字段排序
- python使用ssh 中文_Python3制作简易SSH登录工具
- 进度条设置_为你的练习设置进度条
- 火狐 移动 html 元素,python中的Firefox+Selenium:如何交互式地获取元素html?
- strictmath_Java StrictMath nextUp()方法与示例
- json转string示例_C.示例中的String.Copy()方法