python中的numpy模块和pandas模块的区别_python中pandas模块的数据对象和数据透视

我们一般都是预定将pandas库加载为pd(import pandas as pd),这种方式也是官网推荐的方式。
pandas模块依赖于numpy模块(在pip安装pandas时会自动安装),也需要引入import numpy as np
pandas的数据结构有Series和DataFrame
Series是一维数据结构
DataFrame表示为具有行和列的二维数据
DataFrame的每个column就是一个Series
一、创建数据对象
创建Series数据
Series(data=https://www.it610.com/article/None,index=None,dtype=None,name=None)
data:创建的Series对象的数据,可以为list或dict
打印时会打印两列。第一列称为索引(data为list时通常从0开始,data为dict时为dict的键),第二列是对应的数据
index:指定索引的值,index必须是一个tuple或list
data为list或dict时index的元素数量必须和data中的数据数量相同
data为一个字符串或数字时,会按照index的数量建立相同数量的数据,且所有索引对应的值相同(都为data)
dtype:指定数据的数据类型
name:指定Series数据对象的name,当在DataFrame的上下文中使用时,这个名称作为列名
创建DataFrame数据
1、手动创建
DataFrame(data=https://www.it610.com/article/None,index=None,columns=None,dtype=None)
手动将数据输入,这只适用于微小的数据集
data:要输入的数据
当data为dict时
{"col1_name": [1,2,3,4],"col2_name": ["one", "two", "three", "four"]}
当data为list时
[{'col1_name': 1, 'col2_name': 2}, {'col1_name': 5, 'col2_name': 10}]
[[1,2,3],[4,5,6]] #这种格式的list不提供columns默认为数字
index:指定索引值,默认为数字索引(从0开始)
columns:指定列名称,默认为数字(从0开始)
dtype:指定所有列的数据类型
2、从文件加载
从不同的文件加载有各自对应的方法,常用的有:
read_excel()、read_csv()、read_html()、read_json()、read_sql()、read_sql_query()、read_sql_table()
read_sql()是从一个sql查询或sql表格中导入,整合了read_sql_query()和read_sql_table()
read_table(path_or_buf,sep='\t',header=None,names=None,index_col=None,prefix=None,mangle_dupe_cols=True,dtype=None,engine=None,converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True,thousands=None,encoding=None)
path_or_buf:可以是文件本地路径,也可以是URL,URL协议包括http、ftp、s3和file。
sep:指定列分隔符
header:指定作为列名的行号,可以是一个int或int组成的list,默认从文件的第一行推断列名
names:通过一个不允许有重复值的list或set等指定所有列名称,当指定该参数时需要指定header参数值为0
index_col:用作索引的列名称str或列索引int,也可以是一个它们组成的list
prefix:当没有列名称时默认添加列名称的前缀
mangle_dupe_cols:重复列将被指定为'col_name','col_name.1','col_name.2'...
dtype:使用dict指定列的数据类型,如{'col_1':type1,'col_2':type2,...},键名为列名称str或列索引int
engine:要使用的分析器引擎('c'或者'python')。C引擎更快,而python引擎目前功能更完善。
converters:用于转换某些列中的值的函数的指令。{'col_1':func1,'col_2':func2,...},键名为列名称str或列索引int
true_values=None,false_values=None:要视为正确或失败的值
skipinitialspace:是否跳过分隔符后的空格
skiprows:int表示跳过文件的前int行,int组成的list表示跳过指定的行
skipfooter:表示跳过从尾部开始的第int行
nrows:要读取的文件行数。用于读取大文件的片段。
na_values:list,要识别为NaN的值
keep_default_na:是否把空值识别为NaN
na_filter:检测缺少的值标记(空字符串和na_values指定的值)。设置为False可以提高性能,特别是读一个大文件时
skip_blank_lines:空行是否跳过
thousands:千位分隔符
encoding:字符编码
3、数据添加
data['three']=data['one'] * data['two'] #添加一个列名为three的列,列中的值为前两列的乘积
data['four']='demo' # 添加一个列名为four的列,列的值全部为demo
data['five']=Series # 从一个Series数据中添加一个列名为five的列
data.insert(colx,'col_name',list)
添加列名为col_name的list的内容到data的第colx的位置
list的元素数量必须等于data的行数,否则报错
4、数据合并
data1.append(other,ignore_index=False)
other:要合并到data1下面的数据,可以是一个也可以是一个list
ignore_index:合并以后索引值是否重建
pandas.concat(objs, axis=0, ignore_index=False)
objs:要合并的DataFrame数据组成的list
axis:合并的轴向,为0表示向下合并,为1表示向右合并
ignore_index:合并以后索引值是否重建
二、基础属性和方法
shape:包含行数和列数的二元元祖
index:所有索引值
columns:所有的列名称
values:不包含列名称的所有值
dtypes:所有列的数据类型
astype(type_str):更改Series对象的数据类型
describe():返回基本统计信息
对于数字列:值计数,平均值,标准差,最小值,最大值,第25,第50和第75的中位数;
对于字符串列:值计数,唯一条目数,最常出现的值(top value)以及最常出现值出现的次数(freq);
DataFrame对象返回所有具有numeric数据类型的列的统计信息
ndim:获取数据中的维数,Series通常为1,DataFrame通常为2
head(n):前n行(n默认为5)
tail(n):最后n行(n默认为5)
Series.count():统计数据总数
Series.value_counts():统计数据中各个值出现的次数
isnull():依次判断值是否为空
notnull():依次判断值是否不为null
Series.rename(new_name):重命名Series数据
三、数据获取
data.column_name或者data[column_name]:获取一个指定名称的列
data['column_name_1','column_name_2','column_name_3']:根据列名选择多列
iloc[rows,columns]:根据数字索引获取指定的行或列
获取行或列都必须使用数字索引来获取
rows:指定的行,可以为一个数字或切片((start_rowx:end_rowx))
columns:指定的列,可以为一个数字或数字组成的list([colx1,colx2,colx3...])
loc[rows,columns]:根据索引实际值或列名称获取指定的行或列
获取行按照索引的实际值,获取列必须是字符串类型的列名称
rows:指定的行,可以为一个索引值或切片
columns:指定的列,可以为字符串或字符串组成的list
data[data[column_name]的布尔运算]:选择指定列column_name中值布尔运算返回True的所有行
data[data["销量"]>15] #返回所以销量大于15的行
data.isin(list):依次判断所有值是否包含在list中并替换为布尔值
data.loc[data.isin(list)]:把返回的布尔值换成原来的值
data.query("条件筛选"):筛选出符合条件筛选的所有行
data.query("年龄>35 & (政治面貌=='党员' | 籍贯=='河北')")
筛选出所有年龄大于35岁的党员和河北籍的人员信息
data[data['column_name'].str.contains("search_str")] #模糊筛选
data[data['column_name'].str.contains(r"reg_str")] #正则筛选
contains()函数要求数据全部是字符串类型,否则会报错
func(data):返回把data中的所有数据依次带入到func函数中计算的结果
def func(s): return s+5
func(data)返回一个所有数加上5之后的新数据对象
Series数据特有的:
ser[index]或者ser[key_name]:通过索引来获取某一个数据
ser[start_x:end_x]:通过切片获取某一部分数据
使用list作为索引ser[list]获取list中指定的索引的数据
ser[[4,2,7]] #获取ser中索引值分别为4、2、7的数据
ser.rank(method='average',ascending=True):对ser中的数据进行排名,ascending的值True(升序),False(降序)
method的值:
average值相等时,取排名的平均值
min值相等时,取排名最小值
max值相等时,取排名最大值
first值相等时,按原始数据出现顺序排名
四、内容的操作处理
删除行或列
drop(labels=None, axis=0, index=None, columns=None, inplace=False, errors='raise')
labels:行的索引值或列的名称,一次删除多个可以传入一个list
axis:结合labels参数使用,当axis为0时表示要删除行,axis为1时表示要删除列
index:行索引值,一次删除多个可以传入一个list
columns:列的名称,一次删除多个可以传入一个list
inplace:是否替换原数据对象,默认为False,返回一个删除指定行或列的新的DataFrame数据,如果为True则直接修改元数据且没有返回
errors:如果为'ignore',抑制错误并且只删除现有标签。
del df['col_name'] #删除指定的列
data.pop('col_name') #删除指定的列
删除缺失值
dropna(axis=0, how='any', thresh=None, inplace=False)
dropna()#每行只要有空值,就将这行删除
dropna(axis=1)#每列只要有空值,整列丢弃
dropna(how='all')# 一行中全部为NaN的,才丢弃该行
dropna(thresh=3)# 每行至少3个非空值才保留
缺失值填充
fillna(value=https://www.it610.com/article/None, method=None, inplace=False)
fillna(0) #全部用0填充
fillna({1:0,2:0.5}) #对第一列nan值用0填充,第二列用0.5填充
fillna(method='ffill' 或 'pad') #在列方向上以前一个值作为值赋给NaN
fillna(method='bfill' 或 'backfill') #在列方向上以后一个值作为值赋给NaN
值替换
replace(to_replace=None, value=https://www.it610.com/article/None, inplace=False, method='pad')
replace(0, np.nan) #将A列中0全部替换成空值
replace([0,-1], np.nan)#将0和-1替换成空值
replace([0,-1],[np.nan,1])#将0替换成空值,-1替换成1
replace({0:np.nan, -1:1})#同上,写法不同,更清晰
重复值处理
duplicated(),drop_duplictad(),unique()
duplicated():依次对比每行内容是否重复,返回true和false组成的Series类型
duplicated('col_name')
duplicated(['col_name1','col_name2'])#两行只要指定的列一样就算重复
drop_duplicates()#保留指定列组合的唯一值的行,保留第一行,参数提供和duplicated()相同,不提供表示对比所有列的内容,也可以提供一列或若干列
data['col_name'].unique()# 返回一列中唯一值组成的数组
修改列名
rename(columns=None,inplace=False,errors='ignore')
通过传入dict来修改列名{“old_column_name”: “new_column_name”, …}
通过传入数据类的某个方法:data.rename(columns=str.lower)#修改所有列名称为小写
通过传入某个函数来依次修改所有列:data.rename(columns=lambda x: x.lower().replace('.','-'))
五、数据排序
索引排序
sort_index(axis=0, level=None, ascending=True,inplace=False,na_position='last',ignore_index=False)
axis:0表示按索引对行排序,1表示按索引对列排序
level:要排序的索引级别(索引级别(从0开始)或索引名称,可以是list或tuple)
ascending:True表示升序排序,False表示降序
na_position:排序后空值放在哪里,默认(last)放到末尾,first表示放到开头
ignore_index:是否排序之后重置索引值为从0开始的数字索引
值排序
sort_values(by, axis=0, ascending=True, inplace=False, na_position='last', ignore_index=False)
by:指定列名(axis=0或'index')或索引值(axis=1或'columns')组成的list
axis:若axis=0或'index',则按照指定列中数据大小排序;若axis=1或'columns',则按照指定索引中数据大小排序,默认axis=0
ascending:是否按指定列的数组升序排列,默认为True,即升序排列
inplace:是否用排序后的数据集替换原来的数据,默认为False,即不替换
na_position:{'first','last'},设定缺失值的显示位置
六、索引操作
索引重建
reindex(labels=None, index=None, columns=None, axis=None, method=None,fill_value=https://www.it610.com/article/nan)
重建数据的索引或列名,默认更新index,返回一个新的DataFrame
new_ser=ser.reindex(['new_index1','new_index2',...])
指定columns参数更新列名:
new_ser=ser.reindex(columns=['new_columns1','new_columns2',...])
如果原索引或列名称中某个值不存在,所有数据会自动补上NaN
method='ffill' 或 'pad' :在列方向上以前一个值作为值赋给NaN
method='bfill' 或 'backfill' :在列方向上以后一个值作为值赋给NaN
fill_value参数为原先不存在的索引或列补上一个固定的值,而不在是NaN
指定索引
set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
将DataFrame中的列columns设置成索引index,可以设置单索引和复合索引
keys:要设置为索引的列名称list,按照list中列名称的顺序分为1级索引、2级索引、...
drop:设置成索引的列是否从数据中删除
append:是否保留原有索引(在原有索引的下级创建新的索引)
inplace是否在原数据集上修改而不是仅返回新的数据
verify_integrity:是否检查新的索引是否重复(新的索引有重复值会报错)
重置索引
reset_index(level=None,drop=False,inplace=False)
删除指定的索引,将索引变回列,并补上常规的数字索引,其实就是将使用set_index()打造的索引逆向操作
level:只从索引中删除给定的级别(索引级别(从0开始)或索引名称,可以是list或tuple)。默认(None)删除所有级别
drop:删除索引时该索引是否直接删除(默认恢复为列)
七、数据透视
数据透视功能在pandas中用pivot_table方法实现
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc=numpy.mean, fill_value=https://www.it610.com/article/None, margins=False, dropna=True, margins_name='All')
data:要进行分析的DataFrame数据,通常用文件导入
data = https://www.it610.com/article/pandas.read_excel('file_name.xlsx')
values:数据透视统计的项目名称(一个或多个(list))
index:透视数据中的索引项目名称(一个或多个(list))
columns:透视数据中的行项目名称(一个或多个(list))
aggfunc:项目统计方法(一个或多个),默认为numpy.mean(平均数),numpy.sum为数值的和,len表示个数
当aggfunc为一个方法名时:aggfunc=numpy.sum
当aggfunc为一个list时:aggfunc=[numpy.sum,len]
当aggfunc为一个dict时: aggfunc={"销量":np.sum,"电量":[np.sum,np.mean]}
上例中表示按销量计算总和,按电量计算总和和平均数
fill_value:当统计结果为空或NaN时使用指定字符代替
margins:是否显示汇总信息
dropna:是否删除全部为空或NaN的列
margins_name:显示汇总信息时的显示标题
八、导出和保存
常用的导出方法有:
to_csv(),to_excel(),to_html(),to_json()
to_markdown(),to_numpy(),to_pickle(),to_sql(),to_string()
to_excel(save_file,sheet_name='Sheet1',na_rep='',
float_format=None,columns=None,header=True,
index=True,index_label=None,startrow=0,
startcol=0,inf_rep='inf',freeze_panes=None,encoding=None)
na_rep:缺少数据用指定字符代替
float_format:浮点数的格式,如float_format="%.2f"表示保留两位小数
header:是否导出列名称
index:是否把行的索引导出
index_label:导出行索引的那一列的列名
startrow、startcol:导出数据写入区域的左上角坐标
inf_rep:表示无穷大的表示字符串
freeze_panes:需传入一个二元元祖,表示窗口冻结的坐标
同一个Excel文件写入多个Sheet表格,需要用到pd.ExcelWriter()打开一个Excel文件
work=pd.ExcelWriter('demo.xlsx') #打开一个文件
data1.to_excel(work,sheet_name='sheet1') #写入数据到sheet1工作表
data2.to_excel(work,sheet_name='sheet2') #写入数据到sheet2工作表
work.save() #保存文件
to_csv(path_or_buf,sep=',',na_rep='',float_format=None,columns=None,header=True,index=True,index_label=None,mode='w',encoding='utf-8',chunksize=None, date_format=None,decimal='.')
path_or_buf:保存文件名或文件句柄
sep:输出文件的字段分隔符,长度为1的字符串。
na_rep:缺少数据用指定字符代替
float_format:浮点数的格式,如float_format="%.2f"表示保留两位小数
columns:保存的列组成的list
header:是否导出列名称
index:是否把行的索引导出
index_label:指定导出索引的列名
mode:保存文件的打开方式
encoding:字符编码
line_terminator:指定换行符,默认为"os.linesep"
chunksize:每次写入操作的写入行数
date_format:日期的格式,如:"%Y-%m-%d %H:%M:%S"
decimal:字符识别十进制分隔符。使用','表示欧洲数据
最后编辑:2020-11-03作者:qingheluo
python中的numpy模块和pandas模块的区别_python中pandas模块的数据对象和数据透视
文章图片

【python中的numpy模块和pandas模块的区别_python中pandas模块的数据对象和数据透视】这个作者貌似有点懒,什么都没有留下。

    推荐阅读