一、Series结构
1、series对象的创建
import pandas as pd s = pd.Series(data,index,dtype,copy)
2、查询访问
(1)按位置下标
s[0]
(2)按行标签
s['a']
3、常用属性
-
s.axes:返回行索引组成的列表。
-
s.dtype:返回s中数据的数据类型。
-
s.empty:判断s是否为空。
-
s.ndim:返回s的维度,Series对象是一维的,因此始终返回1。
-
s.size:返回s的长度。
-
s.values:返回s中数据组成的数组。
-
s.index:返回Rangeindex对象,用来描述索引的取值范围。
4、常用方法
-
s.head(行数n):返回series对象的前n行数据。
-
s.tail(行数n):返回series对象的后n行数据。
-
pd.isnull(series对象):返回series对象,该对象中的值若不存在/缺失,则该位置返回True,否则返回False。
-
pd.notnull(series对象):返回series对象,该对象中的值若存在/不缺失,则该位置返回True,否则返回False。
5、遍历
可直接使用for循环遍历Series对象。
for value in s: print(value)
6、字符串处理
函数名称 | 函数功能和描述 |
---|---|
s.str.lower() | 将的字符串转换为小写。 |
s.str.upper() | 将的字符串转换为大写。 |
s.str.len() | 得出字符串的长度。 |
s.str.strip() | 去除字符串两边的空格(包含换行符)。 |
s.str.split() | 用指定的分割符分割字符串。 |
s.str.cat(sep="") | 用给定的分隔符连接字符串元素。 |
s.str.get_dummies() | 返回一个带有独热编码值的 DataFrame 结构。 |
s.str.contains(pattern) | 如果子字符串包含在元素中,则为每个元素返回一个布尔值 True,否则为 False。 |
s.str.replace(a,b) | 将值 a 替换为值 b。 |
s.str.count(pattern) | 返回每个字符串元素出现的次数。 |
s.str.startswith(pattern) | 如果 Series 中的元素以指定的字符串开头,则返回 True。 |
s.str.endswith(pattern) | 如果 Series 中的元素以指定的字符串结尾,则返回 True。 |
s.str.findall(pattern) | 以列表的形式返出现的字符串。 |
s.str.swapcase() | 交换大小写。 |
s.str.islower() | 返回布尔值,检查 Series 中组成每个字符串的所有字符是否都为小写。 |
s.str.issupper() | 返回布尔值,检查 Series 中组成每个字符串的所有字符是否都为大写。 |
s.str.isnumeric() | 返回布尔值,检查 Series 中组成每个字符串的所有字符是否都为数字。 |
s.str.repeat(value) | 以指定的次数重复每个元素。 |
s.str.find(pattern) | 返回字符串第一次出现的索引位置。 |
二、DataFrame结构
1、创建
import pandas as pd df = pd.DataFrame(data, index, columns, dtype, copy) # 注意:使用字典创建df对象时,字典的值需要使用列表/series等可迭代对象。
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
2、查询访问
(1)列形式访问
df['列标签']
(2)行形式访问
①行标签访问
df.loc['行标签'] df.loc['行标签','列标签'] df.loc['开始行标签':'结束行标签','开始列标签':'结束列标签']
②行位置访问
df.iloc['行位置'] df.iloc['行位置','列位置'] df.iloc['开始行位置':'结束行位置','开始列位置':'结束列位置']
(3)指定行列标签访问
df.reindex(index=['行标签列表'],columns=['列标签列表'])
(4)根据其他df的标签访问
# method可选参数,用来填充元素值。pad/ffill 向前填充值;bfill/backfill 向后填充;nearest 从距离最近的索引值开始填充。 # limit可选参数,用来控制填充的最大行数。 df.reindex_like(df2,method,limit)
3、添加
(1)添加列
①列末尾追加指定值
df['新列标签'] = 指定值
②列末尾追加原有列计算出的值
df['新列标签'] = df['原列标签1']+df['原列标签2']
③指定位置添加指定值
df.insert(index, column='新列标签', value=指定值)
(2)添加行
①行末尾追加df
df.append(df2)
4、删除
(1)删除列
# 方法一 df.pop('列标签') # 方法二 del df['列标签']
(2)删除行
df.drop('行标签')
5、常用属性
-
df.T:行列转置。
-
df.axes:返回一个以RangeIndex对象和Index对象组成的列表。
-
df.dtypes:返回一个以每列数据的数据类型组成的Series对象。
-
df.empty:判断df对象是否为空。
-
df.ndim:返回df对象的维度。
-
df.shape:返回(行数, 列数)这样的一个元组。
-
df.size:返回df对象中的元素数量。
-
df.values:返回df中数据组成的数组。
6、常用方法
-
df.head(行数n):返回前n行数据。
-
df.tail(行数n):返回后n行数据。
-
df.shift(peroids,freq,axis,fill_value):移动peroids步,axis方向,fill_value填充缺失值。
7、描述性统计(聚合)
函数名称 | 描述说明 |
---|---|
df.count(axis=0) | 统计某个非空值的数量。 |
df.sum() | 求和 |
df.mean() | 求均值 |
df.median() | 求中位数 |
df.mode() | 求众数 |
df.std() | 求标准差 |
df.min() | 求最小值 |
df.max() | 求最大值 |
df.abs() | 求绝对值 |
df.prod() | 求所有数值的乘积。 |
df.cumsum() | 计算累计和,axis=0,按照行累加;axis=1,按照列累加。 |
df.cumprod() | 计算累计积,axis=0,按照行累积;axis=1,按照列累积。 |
df.corr() | 计算数列或变量之间的相关系数,取值-1到1,值越大表示关联性越强。 |
df.describe() | 显示于df数据列相关的统计信息摘要。 |
8、使用自定义函数
(1)操作整个DataFrame对象
df.pipe(方法名,参数值)
(2)操作行或列
df.apply(方法名,axis)
(3)操作单一元素
df.applymap(方法名)
9、修改行/列标签名
# inplace参数为False表示拷贝一份数据,并在拷贝的数据上重命名;若为True,则在原数据上重命名。 df.rename(columns={'原列名':'新列明'},index={'原行名':'新行名'},inplace=False)
10、遍历
(1)使用for循环遍历
# 使用for循环遍历df得到的是列标签。 for column_name in df: print(column_name)
(2)内置迭代方法
①items():以列标签,列数据(key,value)的形式遍历
for key,value in df.items(): print(key,value)
②iterrows():以行标签,行数据(row_index,row)的形式遍历
for row_index,row in df.iterrows(): print(row_index,row)
③itertuples():返回一个迭代器,把df的每一行生成一个元组
for row in df.itertuples(): print(row)
11、排序
(1)按标签排序
# ascending参数:默认为True,升序排序;为False时,降序排序。 # axis参数:默认为0,按行标签排序;为1时,按列标签排序。 df.sort_index(ascending=True,axis=0)
(2)按值排序
# by参数:排序数列的df的列名。 # kind参数:指定排序算法。quicksort快速排序,mergesort归并排序-最稳定的。 df.sort_value(by='列名',kind='quicksort') df.sort_value(by=['列名1','列名2'],kind='quicksort')
12、去重
# subset参数:要去重的列名,默认为None。 # keep参数:first表示只保留第一次出现的;last表示只保留最后一次出现的;False表示删除所有重复项。 # inplace参数:False表示去重后返回一个副本;True表示直接在原数据上删除。 df.drop_duplicates(subset=['列名1','列名2','列名3'],keep='first',inplace=True)
13、设置显示样式
(1)样式设置方法
函数名称 | 说明 |
---|---|
pd.get_option('参数值') | 获取解释器的默认参数值。 |
pd.set_option('参数值') | 更改解释器的默认参数值。 |
pd.reset_option('参数值') | 解释器的参数重置为默认值。 |
pd.describe_option('参数值') | 输出参数的描述信息。 |
pd.option_context('参数值') | 临时设置解释器参数,当退出使用的语句块时,恢复为默认值。 |
(2)样式设置方法的参数
参数 | 说明 |
---|---|
display.max_rows | 最大显示行数,超过该值用省略号代替,为None时显示所有行。 |
display.max_columns | 最大显示列数,超过该值用省略号代替,为None时显示所有列。 |
display.expand_frame_repr | 输出数据宽度超过设置宽度时,表示是否对其要折叠,False不折叠,True要折叠。 |
display.max_colwidth | 单列数据宽度,以字符个数计算,超过时用省略号表示。 |
display.precision | 设置输出数据的小数点位数。 |
display.width | 数据显示区域的宽度,以总字符数计算。 |
display.show_dimensions | 当数据量大需要以truncate(带引号的省略方式)显示时,该参数表示是否在最后显示数据的维数,默认 True 显示,False 不显示。 |
14、--统计函数、窗口函数、聚合函数
15、--缺失值处理
16、--分组操作
17、merge()连接操作
merge()方法可以根据指定的键连接两个df。
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True,suffixes=('_x', '_y'), copy=True)
参数名称 | 说明 |
---|---|
left/right | 两个不同的 DataFrame 对象。 |
on | 指定用于连接的键(即列标签的名字),该键必须同时存在于左右两个 DataFrame 中,如果没有指定,并且其他参数也未指定, 那么将会以两个 DataFrame 的列名交集做为连接键。 |
left_on | 指定左侧 DataFrame 中作连接键的列名。该参数在左、右列标签名不相同,但表达的含义相同时非常有用。 |
right_on | 指定左侧 DataFrame 中作连接键的列名。 |
left_index | 布尔参数,默认为 False。如果为 True 则使用左侧 DataFrame 的行索引作为连接键,若 DataFrame 具有多层 索引(MultiIndex),则层的数量必须与连接键的数量相等。 |
right_index | 布尔参数,默认为 False。如果为 True 则使用左侧 DataFrame 的行索引作为连接键。 |
how | 要执行的合并类型,从 {'left', 'right', 'outer', 'inner'} 中取值,默认为“inner”内连接。 |
sort | 布尔值参数,默认为True,它会将合并后的数据进行排序;若设置为 False,则按照 how 给定的参数值进行排序。 |
suffixes | 字符串组成的元组。当左右 DataFrame 存在相同列名时,通过该参数可以在相同的列名后附加后缀名,默认为('x','y')。 |
copy | 默认为 True,表示对数据进行复制。 |
18、concat()拼接操作
pd.concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False)
参数名称 | 说明 |
---|---|
objs | 一个序列或者是Series、DataFrame对象。一般是一个列表[df1,df2]。 |
axis | 表示在哪个轴方向上(行或者列)进行连接操作,默认 axis=0 表示行方向。 |
join | 指定连接方式,取值为{"inner","outer"},默认为 outer 表示取并集,inner代表取交集。 |
ignore_index | 布尔值参数,默认为 False,如果为 True,表示不在连接的轴上使用索引。 |
join_axes | 表示索引对象的列表。 |
19、随机抽样
df.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
参数名称 | 参数说明 |
---|---|
n | 表示要抽取的行数。 |
frac | 表示抽取的比例,比如 frac=0.5,代表抽取总体数据的50%。 |
replace | 布尔值参数,表示是否以有放回抽样的方式进行选择,默认为 False,取出数据后不再放回。 |
weights | 可选参数,代表每个样本的权重值,参数值是字符串或者数组。 |
random_state | 可选参数,控制随机状态,默认为 None,表示随机数据不会重复;若为 1 表示会取得重复数据。 |
axis | 表示在哪个方向上抽取数据(axis=1 表示列/axis=0 表示行)。 |
20、文件读写
(1)csv文件读写
①读取csv文件
df = pd.read_csv(filepath,sep,header=0,index_col,usecols,na_values,dtype)
参数名称 | 参数说明 |
---|---|
filepath | 要读取的文件路径+名称 |
sep | 指定分隔符,默认为逗号“,”。 |
header | 指定表头行。默认为0,表示第一行是表头。如果没有表头,设置为None。 |
index_col | 将某一列设置为索引。 |
usecols | 选择读取的列。可以是列名组成的列表,也可以是列索引组成的列表。 |
na_values | 指定哪些值应被视为NaN。可以是一个列表。 |
dtype | 指定列的数据类型。 |
②写入csv文件
df.to_csv(path_or_buf=None,sep=',',columns=None,index=True,header=True,mode='w',encoding=None)
参数名称 | 参数说明 |
---|---|
path_or_buf | 文件路径或类似文件的对象。,默认为None。 |
sep | 指定分隔符,默认为逗号“,”。 |
columns | 要写入的列名列表,默认为None,表示写入所有列。 |
index | 是否将行索引写入文件,默认为True。 |
header | 是否写入列名,默认为True。 |
mode | 文件打开模式,默认为’w‘(写入),如果文件已存在,则会被覆盖。 |
encoding | 指定输出文件的字符编码,默认为None,使用系统默认编码。 |
(2)excel文件读写
①读取excel文件
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False,dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)
参数名称 | 说明 |
---|---|
io | 表示 Excel 文件的存储路径。 |
sheet_name | 要读取的工作表名称。 |
header | 指定作为列名的行,默认0,即取第一行的值为列名;若数据不包含列名,则设定 header = None。若将其设置 为 header=2,则表示将前两行作为多重索引。 |
names | 一般适用于Excel缺少列名,或者需要重新定义列名的情况;names的长度必须等于Excel表格列的长度,否则会报错。 |
index_col | 用做行索引的列,可以是工作表的列名称,如 index_col = '列名',也可以是整数或者列表。 |
usecols | int或list类型,默认为None,表示需要读取所有列。 |
squeeze | boolean,默认为False,如果解析的数据只包含一列,则返回一个Series。 |
converters | 规定每一列的数据类型。 |
skiprows | 接受一个列表,表示跳过指定行数的数据,从头部第一行开始。 |
nrows | 需要读取的行数。 |
skipfooter | 接受一个列表,省略指定行数的数据,从尾部最后一行开始。 |
②写入excel文件
Ⅰ、写入到一个sheet页
df.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)
参数名称 | 描述说明 |
---|---|
excel_wirter | 文件路径或者 ExcelWrite 对象。 |
sheet_name | 指定要写入数据的工作表名称。 |
na_rep | 缺失值的表示形式。 |
float_format | 它是一个可选参数,用于格式化浮点数字符串。 |
columns | 指要写入的列。 |
header | 写出每一列的名称,如果给出的是字符串列表,则表示列的别名。 |
index | 表示要写入的索引。 |
index_label | 引用索引列的列标签。如果未指定,并且 hearder 和 index 均为为 True,则使用索引名称。如果 DataFrame 使用 MultiIndex,则需要给出一个序列。 |
startrow | 初始写入的行位置,默认值0。表示引用左上角的行单元格来储存 DataFrame。 |
startcol | 初始写入的列位置,默认值0。表示引用左上角的列单元格来储存 DataFrame。 |
engine | 它是一个可选参数,用于指定要使用的引擎,可以是 openpyxl 或 xlsxwriter。 |
Ⅱ、写入到多个sheet页中
# 使用 ExcelWriter 保存文件,使用pd.ExcelWriter()方法创建ExcelWriter对象。 with pd.ExcelWriter('example.xlsx') as writer: # 根据ExcelWriter对象,使用df.to_excel()方法将数据写入到excel中。 df1.to_excel(writer, sheet_name='Sheet1', index=False) df2.to_excel(writer, sheet_name='Sheet2', index=False)
pandas.ExcelWriter(path, engine=None, date_format=None, datetime_format=None, mode='w', storage_options=None, if_sheet_exists=None, engine_kwargs=None, **kwargs)
参数名称 | 描述说明 |
---|---|
path | 类型:str、path object 或 file-like object。说明:目标文件的路径或文件对象。 |
engine | 类型:str,默认 None。说明:写入文件所使用的引擎,例如 openpyxl。 |
date_format | 类型:str,默认 None。说明:日期列的格式。 |
datetime_format | 类型:str,默认 None。说明:日期时间列的格式。 |
mode | 类型:str,默认 ‘w’。说明:文件打开模式。'w' 表示写入模式,'a' 表示追加模式。 |
storage_options | 类型:dict,默认 None。说明:用于存储连接的额外选项。 |
if_sheet_exists | 类型:str,默认 None。说明:如果工作表已经存在,应采取的操作,包括 error、new、replace 或 none。 |
engine_kwargs | 类型:dict,默认 None。说明:传递给引擎的其它关键字参数。 |
21、索引操作
(1)读取文件时直接设置行索引
# 通过index_col参数,可以直接将某列设置为行标签 pd.read_csv('person.csv',index_col='列名')
(2)对df对象设置索引
# 通过set_index()方法,可以直接将某列设置为行标签 df.set_index('列名')
(3)重置df对象的索引
df.reset_index()