Python-第三方库-Pandas
pandas 提供快速、灵活和富有表现力的数据结构,旨在使处理“关系”或“标记”数据简单又直观
安装
anaconda
|
|
pip
|
|
常用函数
- pd.DataFrame():创建df
- pd.concat():合并两个结构相似的表
- pd.merge():连接两个表,on参数指定参照的key,how参数选择连接方式
- pd.to_datetime():将字符串Series转换为datetime对象Series,该类型为DatetimeIndex
- pd.read_xxx():读取xxx类型文件并返回df,parse_dates参数进行datetime对象列的转换
数据类型
dataframe和series(单列的df)方法:
- describe():对数值列进行统计并返回dataframe,百分号为百分位数
- max():获取最大值
- count():行数
- mean():平均值
- std():方差
- min():最小值
- pivot():重塑df,以选择一列的值作为新df的列名,colume参数选择选择的列,values参数设置默认值,index选择索引(没有index则使用原表的index)
- reset_index():添加新的索引列,id_vars参数指定新df的索引列
- pivot_table():和pivot类似,但是该方法统计聚合值
- head():返回前N行的df
- tail():返回最后N行的df
- to_xxx():将df转换为xxx类型文件
- isin():转换Series为布尔Series,值包含在其中的行为True,否则为False
- notna():转换Series为布尔Series,值不为None则为True,否则为False
- plot():生成plot绘图对象,之后可以使用matplotlib.pyplot.show()显式结果
- rename():修改列名
- agg():给出列名和对于列要统计的聚合量,返回df
- groupby():按给定列的不同值进行分组,返回DataframeGroupby对象,该对象拥有和pd类似的方法和运算符
- value_counts():给定列统计不同值的行数,返回df
- info():查看技术信息
- set_index():设置索引列
- resample():具有DatetimeIndex对象列的df的方法,按给定频率将时间索引进行分组,后面可以使用聚合函数来获取聚合值
- idxmax():返回Series中最大值所在行的索引值
- replace():使用to_replace参数的字典对行进行替换,返回df
属性
- dtypes:返回每列的类型的df
- plot:plot画图属性,返回PlotAccessor对象
- str:对列的文本值进行操作的对象,返回StringMethod对象
运算符:
- 加减乘除和逻辑运算
[]
:读取特定列返回df,作为左值时修改原dfloc[]
:根据传入布尔Series过滤行并选择列返回df,作为左值时修改原dfiloc[]
:直接传入行数和列数返回df,作为左值时修改原df
PlotAccessor
方法
- xxx():画出xxx图,后面可以用matplotlib.pyplot.show()显式结果,比如scatter,box等,详见文档
datetime
属性
- dt:通过该属性访问year,month等具体信息,这些信息可以用于给原df分组groupby
DatetimeIndex
方法:具有和df类似的方法
DatetimeIndexResampler
方法:具有和df类似的方法
属性:
- freq:分组频率
StringMethod
方法
- lower():转换为小写
- split():按pat参数指定的字符串分割每行的值,返回Series
- get():获取每行第n个元素,返回Series
- contains():判断每行是否包含pat参数的字符串,返回布尔Series
- len():返回每行的长度,返回Series
入门教程
处理的数据类型
|
|
|
|
DataFrame是一种二维数据结构,可以在列中存储不同类型的数据(包括字符、整数、浮点值、分类数据等),类似于excel
使用下标访问Series列
|
|
Series也可以创建
|
|
许多 pandas 操作返回 DataFrame 或 Series
常用方法,更多详见文档
如何读取和写入表格数据
read_xxx()函数读取xxx类型文件并返回DataFrame,如read_csv()函数读取csv文件并返回DataFrame,其他的还有csv、excel、sql、json、parquet 等
|
|
to_xxx()函数存储DataFrame为xxx类型文件
|
|
df.head(N)方法查看df的前N行,df.tail(N)方法查看df的最后N行
|
|
df.types属性查看每列的数据类型
|
|
df.info()方法查看df的技术信息
|
|
如何选择 df 的子集
使用[]
选择单个列,返回Series对象,或选择多个列的列表,返回df对象
df.shape属性返回一个元组,包含行数和列数,series.shape属性返回只包含行数的元组
|
|
传入[]
布尔值Series过滤特定行
|
|
除了比较运算符还可以用来生成布尔Series的函数
- isin([…]):值含于列表中
- notna():值不为None
|
|
布尔值Series之间可以进行逻辑运算
|
|
在[]
前面添加loc
运算符,第一个参数是行过滤条件,第二个参数是选择的列
|
|
还可以使用iloc
函数直接指定行数和列数
|
|
使用loc和iloc选择单列时可以直接赋值
|
|
如何创建plot绘图
|
|
读取csv文件并设置索引列参数index_col,这里索引列是date类型,所以需要参数parse_dates为true转换一下
|
|
创建plot对象,然后展示plot对象
|
|
df.plot.scatter方法比较两个列的散点图,参数x和参数y选择列名,
|
|
df.plot.box方法画箱线图
|
|
除了scatter和box还有很多其他的图,比如箱线图,详见文档
df.plot.area画堆积面积图,figsize为一个二元组表示图表的长和宽,参数subplots将每一列单独放到一个图中,其他图也可以使用这两个参数,类似参数详见文档
|
|
pandas 创建的每个绘图对象都是一个 Matplotlib 对象
从现有列派生的新列
给[]
传入新列名称并赋值,可以直接用一个Series进行运算的结果赋值
|
|
可以直接将Series加减乘除一个值或逻辑运算,会给每一个元素进行这样的运算,Series之间也可以进行加减乘除运算或逻辑运算,会逐个对应元素进行运算。如果需要更高级的逻辑可以使用apply方法
|
|
rename方法重命名列标签,未重命名的列保持原名
|
|
还可以使用函数来重命名映射,如str.lower将名称转换为小写
|
|
计算汇总统计量
聚合统计
DataFrame.agg方法定义给定列的聚合统计信息的特定组合,更多聚合统计信息见文档
|
|
返回以键为列名,所有值列表的并集为index索引的dataframe
groupby方法将dataframe按指定列的值分组,然后可以给每一组求聚合统计信息,分组也拥有df的几乎所有方法
|
|
返回以选择的列名为返回值的列明,groupby列不同值为索引的dataframe
整个过程为:
- 将数据分组
- 将函数独立应用于每个组
- 将结果组合成数据结构
也可以先分组再选择列
|
|
可以选择多个列进行分组
|
|
value_counts方法统计每种值的行数,其实是分组操作的组合,常用于离散化
|
|
重塑dataframe的布局
df.sort_values方法排序行,by参数选择排序依据的列,ascending参数确定是否升序排列,默认升序。排序详细内容文档
|
|
前面如何选择df子集,可以传入布尔值df来取子集
|
|
pivot()方法重塑df,以选择的列的不同值为新df的列,colume参数为选择的列,values参数设置默认值,index选择索引(没有index则使用原表的index,修改index后会表格会取平均值),更多详见官网文档
reset_index()方法将添加新的索引列
|
|
melt()方法与pivot()方法相反的转换,id_vars参数指定新df的索引列
|
|
pivot方法只是将数据重新排列多个值将出现多个索引值,列聚合值可以使用pivot_table()方法,它多了一个aggfunc参数标记聚合值,将margins参数设为True时会统计边际总和值
|
|
如何合并多个表的数据
concat函数合并两个结构相似的df
|
|
merge函数根据on参数连接两个df,how参数选择连接方式,可以选择内连接,外连接和左右连接
|
|
如何轻松处理时间序列数据
to_datetime函数将字符串Series转换为datetime对象列,该对象为DatetimeIndex
|
|
另外在read_csv函数中添加parse_dates参数可以在读取文件时顺便转换
|
|
datetime对象的dt属性访问详细日期信息,且该信息可以像df中的普通列一样进行分组groupby
|
|
索引为datetime对象时可以不通过dt属性,而使用index属性来访问内部时间信息
|
|
resample方法按给定频率将时间索引进行分组,结果时DatetimeIndexResampler对象,它后面可以使用聚合函数来获取聚合值
|
|
如何操作文本数据
通过列的str属性来访问StringMethod对象的文本方法
lower()方法转换为小写
|
|
split()方法按pat参数指定的字符串分割每行的值,返回Series
|
|
get()方法获取每行第n个元素,返回Series
|
|
contains()方法判断每行是否包含pat参数的字符串,返回布尔Series
|
|
len()方法返回每行的长度,返回Series
|
|
Series.idxmax()方法返回最大值所在行的索引值
|
|
Series.replace()方法使用to_replace参数的字典对行进行替换
|
|