- pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
- Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
- pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
- Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。
- Pandas 里面又定义了两种数据类型:Series 和 Dataframe。
常用缩写:
-
df:任意的Pandas Dataframe对象
-
s:任意的Pandas Series对象
同时我们需要做如下的引入:import pandas as pd import numpy as np #导入数据 pd.read_csv(filename) ##从CSV文件导入数据 pd.read_table(filename) ##从限定分隔符的文本文件导入数据 pd.read_excel(filename)#从Excel文件导入数据 pd.read_sql(query, connection_object)#从SQL表/库导入数据 pd.read_json(json_string)#从JSON格式的字符串导入数据 pd.read_html(url)#解析URL、字符串或者HTML文件,抽取其中的tables表格 pd.read_clipboard()#从你的粘贴板获取内容,并传给read_table() pd.Dataframe(dict)#从字典对象导入数据,Key是列名,Value是数据 #导出数据 df.to_csv(filename)#导出数据到CSV文件 df.to_excel(filename)#导出数据到Excel文件 df.to_sql(table_name, connection_object)#导出数据到SQL表 df.to_json(filename)#以Json格式导出数据到文本文件 #创建测试对象 pd.Dataframe(np.random.rand(20,5))#创建20行5列的随机数组成的Dataframe对象 pd.Series(my_list)#从可迭代对象my_list创建一个Series对象 df.index = pd.date_range('1900/1/30', periods=df.shape[0])#增加一个日期索引 #查看、检查数据 df.head(n)#查看Dataframe对象的前n行 df.tail(n)#查看Dataframe对象的最后n行 df.shape()#查看行数和列数 df.info()#查看索引、数据类型和内存信息 df.describe()#查看数值型列的汇总统计 s.value_counts(dropna=False)#查看Series对象的唯一值和计数 df.apply(pd.Series.value_counts)#查看Dataframe对象中每一列的唯一值和计数 #数据选取 df[col]#根据列名,并以Series的形式返回列 df[[col1, col2]]#以Dataframe形式返回多列 s.iloc[0]#按位置选取数据 s.loc['index_one']#按索引选取数据 df.iloc[0,#]#返回第一行 df.iloc[0,0]#返回第一列的第一个元素 #数据清理 df.columns = ['a','b','c']#重命名列名 pd.isnull()#检查Dataframe对象中的空值,并返回一个Boolean数组 pd.notnull()#检查Dataframe对象中的非空值,并返回一个Boolean数组 df.dropna()#删除所有包含空值的行 df.dropna(axis=1)#删除所有包含空值的列 df.dropna(axis=1,thresh=n)#删除所有小于n个非空值的行 df.fillna(x)#用x替换Dataframe对象中所有的空值 s.astype(float)#将Series中的数据类型更改为float类型 s.replace(1,'one')#用‘one’代替所有等于1的值 s.replace([1,3],['one','three'])#用'one'代替1,用'three'代替3 df.rename(columns=lambda x# x + 1)#批量更改列名 df.rename(columns={'old_name'# 'new_ name'})#选择性更改列名 df.set_index('column_one')#更改索引列 df.rename(index=lambda x# x + 1)#批量重命名索引 #数据处理#Filter、Sort和GroupBy df[df[col] > 0.5]#选择col列的值大于0.5的行 df.sort_values(col1)#按照列col1排序数据,默认升序排列 df.sort_values(col2, ascending=False)#按照列col1降序排列数据 df.sort_values([col1,col2], ascending=[True,False])#先按列col1升序排列,后按col2降序排列数据 df.groupby(col)#返回一个按列col进行分组的Groupby对象 df.groupby([col1,col2])#返回一个按多列进行分组的Groupby对象 df.groupby(col1)[col2]#返回按列col1进行分组后,列col2的均值 df.pivot_table(index=col1, values=[col2,col3], aggfunc=max)#创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表 df.groupby(col1).agg(np.mean)#返回按列col1分组的所有列的均值 data.apply(np.mean)#对Dataframe中的每一列应用函数np.mean data.apply(np.max,axis=1)#对Dataframe中的每一行应用函数np.max 数据合并 df1.append(df2)#将df2中的行添加到df1的尾部 df.concat([df1, df2],axis=1)#将df2中的列添加到df1的尾部 df1.join(df2,on=col1,how='inner')#对df1的列和df2的列执行SQL形式的join 数据统计 df.describe()#查看数据值列的汇总统计 df.mean()#返回所有列的均值 df.corr()#返回列与列之间的相关系数 df.count()#返回每一列中的非空值的个数 df.max()#返回每一列的最大值 df.min()#返回每一列的最小值 df.median()#返回每一列的中位数 df.std()#返回每一列的标准差
下面代码是实现车辆品牌车检的一段代码:
用到技术点:
-
读取excel(read_excel)
-
行筛选功能(=、>、<、in 、isnull)
-
添加列(df.assign,计算出的)
-
行操作
-
单元格操作
import pandas as pd #引入pandas包并起别名 import numpy as np #引入numpy包并起别名 #读取对应sheet页内容 df = pd.read_excel(open(filename, 'rb'), sheetname=“sheet页名称”, encoding='utf-8') #如果变速箱类型是DSG则进行如下筛选 if strDSG == "DSG": result = df[(df[u"厂保期"] == strGuanteeperiod) & (df[u"报价版本号"].isin(ruleversion)) & (df[u"车辆品牌"] == strbrandname) & (df[u"车系"] == r["车系"]) & (df[u"变速箱类型"] == strDSG)] else: result = df[(df[u"厂保期"] == strGuanteeperiod) & (df[u"报价版本号"].isin(ruleversion)) & (df[u"车辆品牌"] == strbrandname) & (df[u"车系"] == r["车系"]) & (df[u"变速箱类型"].isnull())] #是否查询到内容了,iscount>0则查到了 iscount = len(result) # 增加辅助列,来完成对车型系类的比较 df = result.assign(carseries_len=df[u"车型系类"].str.len()) # 增加辅助列-车型系列是否存在车型里包含 df = df.assign(iscarseries=map(lambda x: True if str(x) in r["车型"] else False, df[u"车型系类"])) # 筛选 df = df[df["iscarseries"] == True] # 按车型系列长度倒序 result = df.sort_values("carseries_len", ascending=False) iscount = len(result) if iscount == 0: Errdesc = Errdesc + u"匹配不到保费值;" elif iscount >= 1: # '可以查到保费值 # '以第一个找到的保费值来匹配,查看保费结果是否正确 premiumrule = result[strproductname].values[0] ghxsrule = result[u"公户系数"].values[0] xuhao = result[u"序号"].values[0] if not premiumrule or premiumrule == "" or premiumrule == 0: Errdesc = Errdesc + u"保费值为空;" else: if r["使用性质"] <> "家用": baofei = round(premiumrule * ghxsrule, 0) else: baofei = round(premiumrule, 0) if baofei == float(r["保费"]): Output = Output + u"保费值:" + str(premiumrule) + ";" Output = Output + u"公户系数:" + str(ghxsrule) + ";" Output = Output + u"使用保费页:" + Selectsheetname + ";" Output = Output + u"保费表中序号:" + str(xuhao) + ";" Ckresult = u"正确" else: Errdesc = Errdesc + u"保费值错误(规则表中公户系数:" + str( ghxsrule) + "," + strproductname + ":" + str( premiumrule) + "使用保费页:" + Selectsheetname + ";保费表中序号:" + str(xuhao) + ");"
Pandas知识点梳理下载



