pandas基本操作
pandas 基础属性
pandas.series自带了三个’’属性”,管理分类的cat,管理字符串的str,管理时间的dt
str
- pd.series.str:返回的是一个series的字符串列,但是复杂函数还是要apply写。
- pd.series.str.contain(str):查找列是否包含该str,包含则返回行。
- pd.series.str.len():返回该series列所有str的长度。
dt
首先要把格式转为datatime格式
pd.to_datetime(“series”)
pd.series.dt:返回的是一个series的datetime类型列,可以做datatime类型操作
pd.series.dt:有几个内置属性
hour:返回datetime的时
day: 返回datetime的天
second:返回datetime的秒
quarter:返回第几季度
month:返回月
year:返回年
datatime类型还可以进行加减操作哦
pandas 读写文件1
read_csv
读取txt | tsv*等类似类型文件也可以用,sep设置为空格 | \t 就行了
当然pandas的series也可以写入或读取
Pandas.read_csv(filepath_or_buffer,sep,header,dtype,engine,converters,skiprows,skipfooter,nrows)2
filepath::读取的文件地址或url地址
sep:str类型,默认’,’ 指定分隔符。如果不指定参数,则会尝试使用默认值逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器。并且忽略数据中的逗号,并且可以用正则匹配!
header:指定第几行作为列名(忽略注解行),如果没有指定列名,默认header=0; 如果指定了列名header=None
dtype:例子: {‘a’: np.float64, ‘b’: np.int32} 指定每一列的数据类型,a,b表示列名
engine:使用的分析引擎。可以选择C或者是python,C引擎快但是Python引擎功能更多一些。并且如果sep本意不是正则可以用这个来区别
比如:sep=’::’没有engine时会被识别为正则,本意是数据确实就是以::分隔的,用engine=python来区别
converters:置指定列的处理函数,可以用”序号”也可以使用“列名”进行列的指定
skiprows:默认值 None 需要忽略的行数即header的后xx行开始,,或需要跳过的行号列表(从0开始)
如果是一个csv文件,excel打开默认header为第一行,要从第15行开始读取则设置skiprows=14,但这样header也会被跳过,所以一般是skiprows=[i for i in rang(1,14)]
skipfooters:从文件尾部开始忽略
nrows:从文件中只读取多少数据行,需要读取的行数(从文件头开始算起)
对应的是Dataframe.to_csv(),参数都类似,
# 设置index=None,写入时除去index,这样正常读入就没有unnamed了 |
写入txt
这个要提一下,因为很多人都会忽略to_csv的sep参数。
csv本质是:分割的txt文件,所以实质上pandas也兼容了写入txt
# 常用模板如下 |
read_excel
Pandas.read_excel(io,sheet_name,sep,header,dtype,engine,converters,skiprows,skipfooter,nrows)
与read_csv参数基本相同,这里只介绍额外增加的参数
- io:文件类对象 ,pandas Excel 文件或 xlrd 工作簿。该字符串可能是一个URL。URL包括http,ftp,s3和文件。例如,本地文件可写成file://localhost/path/to/workbook.xlsx
- sheet_name:默认是sheetname为0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframe,表名用字符串表示,索引表位置用整数表示;
read_json
- orient:预期的json字符串格式,orient的设置有以下几个值:
- ‘split’ : dict like {index -> [index], columns -> [columns], data -> [values]}
- ‘records’ : list like [{column -> value}, … , {column -> value}]
- ‘index’ : dict like {index -> {column -> value}}
- ‘columns’ : dict like {column -> {index -> value}}
- ‘values’ : just the values array
- type:返回的格式(series or frame), 默认是 ‘frame’
- dtype:同csv,列的数据类型
- convert_dates:解析日期的列列表;如果为True,则尝试解析类似日期的列,默认值为True
- keep_default_dates:default True。如果解析日期,则解析默认的日期样列
- numpy:直接解码为numpy数组。默认为False;仅支持数字数据,但标签可能是非数字的。
- encoding:json编码
- lines:将每行读取为一个json对象
read_html
Pandas.read_html(io,match,flavor,header,index_col,skiprows,attrs,parse_dates)
- io:接收网址、文件、字符串。网址不接受https,尝试去掉s后爬去
- match:正则表达式,返回与正则表达式匹配的表格
- flavor:html解释器
- index_col:同csv
- skip_rows:同csv
- attrs:属性,比如 attrs = {‘id’: ‘table’}
不是很懂 - parse_dates:解析日期
pandas查询数据
pandas.loc
无敌好吧,我只能说无敌
dataframe.iloc和loc相似,不过只能接受整数的传参。而loc可以接受整数,字符串,bool的传参(注意先行后列就行了)
缺点就是必须按照顺序索引(比如muti index 必须先level 1再索引level 2),而且如果要按行操作需要reset index
初始表格
|
数据提取
# 返回dataframe |
# 连续取值(只能返回dataframe) |
bool类型传参
dataframe.loc[bool]和dataframe[bool]不一样!!!
dataframe.loc[bool]是遍历行,dataframe[bool]是遍历所有元素,但是当index是muti index时不能用index
# 列的bool值要带入新的loc的行部分 |
设置values
df.loc[['viper', 'sidewinder'], ['shield']] = 50 |
dataframe.xs()函数
pandas.DataFrame.xs(key,axis=0,level=None,drop_level=True) 4
- key: 行index或列的name
- axis: index或columns
- level: 指定行的level等级
iter遍历
- 遍历整行:Dataframe.iterrows():
- 遍历全部列:Dataframe.iteritems():
pandas数据处理
nan的处理
dataframe.fillna()
DataFrame.fillna(value=None,method=None,axis=None,inplace=False, limit=None,downcast=None)
- value:将nan填充为的value
- method:填充方法bfill:向后寻找第一个非空进行填充, ffill:向前寻找第一个非空进行填充
- axis:填充的坐标轴
- inplace是否赋值到原dataframe
数据类型转换
# 读入转换 |
dataframe.dropna()
DataFrame.dropna(axis=0, how=’any’,thresh=None, subset=None, inplace=False*)
- axis:axis=0丢掉包含nan值的行,axis=1则为丢掉列
- how:决定是是所有行或列包含nan丢弃(all)还是只有一个就丢弃(any)
dataframe.isnull()
判断obj类里面所有值是否为null,返回bool类型
pandas.drop
DataFrame.drop(labels=None,axis=0, index=None, columns=None,level=None,inplace=False, errors=’raise’
- labels:字符串或数组,需要删去的对应关键字
- axis:axis默认为0 ,即默认删除行
- index:index=labels等价于labels=labels,axis=0
- inplace:是否替换原数据
dataframe.reset_index()
dataframe.reset_index(level=None,drop=False,inplace=False,col_level=0,col_fill=’’)
- level:从index 移除的level index,默认全部移除index重新标号
- inplace:是否替换原数据
- 如果列是muti columns 则选择插入到第几个level
- col_fill:选择列插入时其他列的命名,默认repeat
dataframe.rename()
- mapper:函数或字典
- index:如果axis=0 则mapper作用与index
- columns:axis=1 mapper作用与columns
- axis:指定坐标轴
- inplace:是否替换原数据
该函数也能用在series上
pandas 数据统计
dataframe.info()函数
Dataframe.info(verbose=None,buf=None,max_col=None,memory_usage=None,null_counts=None)
- verbose:是否返回全部信息
- 是否输出到文件,默认输出到屏幕
dataframe.describe()函数
管他的,用默认参数就完事了
还有series.describe(),和这个类似
dataframe.value_counts()函数
Dataframe.value_counts(subset=None,normalize=False,sort=True,ascending=False,dropna=True)
- subset: 需要计数的列
- normalize:返回频数(False)还是比例(True)
- sort:是否排序
- ascending:是否降序排列(默认降序)
- dropna:是否不统计na
- 返回的是去重后对应的key和value
series.value_counts()和这个类似不过没有了subset而已。
但是奇怪的是用Dataframe会报错很神奇。
pandas 数据整理
concat
pandas.concat(objs=[],axis=0,join=outer,ignore_index=False)
- opt:需要合并的series或dataframe
- axis:合并的轴,1为列(横向拼接),0按为行(向下拼接)
- join:合并的方式
- ignore_index: 是否忽略index,如果忽略新的index将按0,1…编号
感觉这一个万能,merge只能两个合并,这个可以多个合并
merge
- left :dataframe
- right: dataframe或者series (需要被merge的对象)
- left_index: 新index用左边的
- right_index: 新index用右边的
- how: left, right, outer, inner, cross, 默认inner,
- left:按左边关键字合并
- right:按右边关键字合并
- outer:取并集关键字合并,没有的关键字用na替代
- inner:取交集关键字合并
- cross: 笛卡尔积合并
- sort:是否排序
- validate:str,optional 对应关系
还有些append什么的就算了。
#df 1 |
groupby
- by:通过什么group 可以是function,list,dic…
- axis: 按行还是按列group,(通常是行
- sort:是否按key值排序,默认排序
- dropna:是否丢弃na值,默认丢弃
- 返回的是一个dataframe!!!
当然series也有groupby,参数相同,只是返回的是一个series。
在pandas读取文件的过程中,最常出现的问题,就是中文问题与格式问题,希望当你碰到的时候,可以完美的解决。
apply
pd.DataFrame.apply(func,axis=0,raw=False,result_type=None,args=(),kwargs
axis:0|index 传入按每行,1|columns依次按每列值传入(通常是axis=1来用)
#df
A B
0 4 9
1 4 9
2 4 9
# axis=0 按行传入的值分别为
[4,4,4],[9,9,9]
# axis=1 按列传入的值分别为
[4,9],[4,9],[4,9]raw:False 代表传入函数为一个Series,True代表传入函数的是一个np.arrary
result_type:expand,reduce,broadcast,当axis=1才有效
进度条
虽然官网上搜索不到了,但还可以用
from tqdm import tqdm |
最后附上pyechart可视化官方文档,配合pandas使用3^
Reference
1. 本文因上次训练拉跨了,遂有感而发,pandas基础学习主要是看这个视频,顺便附上pandas官网链接 ↩
2. 读取文件参数基本参考了:https://www.cnblogs.com/happymeng/p/10481293.html ↩
3. 上次训练又拉跨了,pyechart也该总结一下了…/(ㄒoㄒ)/~~ ↩
4. 索引部分参考 ↩
本文链接:https://dummerfu.top/p/40218.html
版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议 转载请注明出处!