Python学习笔记—pandas

Python学习笔记—pandas

一、数据导入

常用的载入函数是

df = pd.read_csv('C:\\Users\\DataAnalyst.csv', encoding="gbk")
df = pd.read_table()
df = pd.read_excel()
常用参数:
encoding—用它来读取cvs格式的编码,windows采用编码“gbk”。
sep—分割符
header—参数为是否使用表头作为列名,默认是。
names—参数可以为列设置额外的名字

二、查看数据

df.info()   #浏览数据表整体信息。
df.shape    #查看数据的维度(行列)
df.dtypes   #查看数据表数据的格式,也可以指定一列来单独查看。
df.isnull   #查看空值,包含空值返回True,不包含则返回False。
df.positionId.unique()  #查看唯一值,只能对数据表中的特定列。
df.columns  #查看列名称
df.index    #查看索引名称
df.head()   #查看前5行
df.tail()   #查看后5行
df.value()  #查看数据值
df.describe()  #描述性统计
df.T  #转置
df['列名'].astype(np.int64)   #转换某列的数据类型
df_clean.city.value_counts()    #一般用于分类数据,统计所有非零元素的个数,以降序的方式输出series。
len(df_clean.city.unique())    #len函数对唯一值计数

三、数据清洗
主要对空值、大小写问题、数据格式和重复值进行处理。

df[df.isnull()]
df[df.notnull()]
df.dropna(how = 'any')  #删除含有空值的行
df.fillna(value = 0)    #用0填充空值
df[price].fillna(df[price].mean)   #用均值填充空值
df['city'] = df['city'].map(str.strip)  #清除city字段中的的字符空格
df.salary.upper()    #函数将k都转换为K
df.salary.lower()    #函数将K转换为k
df.bottomSalary.astype('int') #更改数据格式
df.rename(columns = {'category': 'category-size'}) #更改列的名称
df_duplicates = df.drop_duplicates(subset = 'positionId', keep = 'first')  #删除重复数据,subset参数—选择以哪个列为去重基准,keep参数是保留方式,first是保留第一个,删除后余重复值,last是删除前面,保留最后一个。
df['city'].replace('SH','shanghai')  #数据修改或替代
df_clean.positionLables.str[1:-1]    #用str函数对字符串截取,去掉第一和最后一个。
df_clean.positionLables.str.replace(' ', '')    #去掉字符串中的空格
word.dropna().str.split(',').apply(pd.value_count)    #删除空值,用str.split方法,把标签按[,]拆分成列表
df1 = df.drop(df["class"], axis= 1) #用drop删除不需要的数据

四、数据预处理
对清洗完的数据进行整理以便后期的统计和分析工作。主要包括数据表的合并,排序,数值分列,数据分组及标记等工作。

数据表合并
df_inner = df.meger(df1, df2, how = 'inner')     #将两个数据表共有的数据匹配在一起生成新的数据集
df_left = df.meger(df1, df2, how = 'left')    #以左边数据集为基础,对共有的数据匹配
df_right = df.meger(df1, df2, how = 'right')    #以右边数据集为基础,对共有的数据匹配

设置索引项
索引列的功能很多,可以进行数据提取,汇总,也可以进行数据筛选等。设置索引的函数为set_index。
df_inner.set_index('id')

排序(按索引、按数值)
df_inner.sort_value(by = 'age')    #按特定列的值排序
df_inner.sort_index()    #按索引列排序

数据分组
df.loc[(df["director" ] >= 100) & (df["num crist"] >= 500) & (df["actor"] >=500),"flag"] = 1 #增加一列,对符合条件的赋值

数据分列
position = word.find('-')    #查找到“-”符号所在的位置,当不存在符号时,find函数会返回-1。
def cut_word(word):
    position = word.find('-')
    bottomSalary = word[:position-1]
    return bottomSalary
df_clean['bottomSalary'] = df_clean[salary].apply(cut_word)    #定义函数,进行数据分列,生成新的列

选取所需的数据生成新的数据集
df_clean =
df_duplicates[['city','companyShortName','companySize','education','positionName','positionLables','workYear','avgSalary']]

进行数据表拼接
df = df1.append(df2, ignore_index = True)
df = pd.concat(df, df1, axis =1) #连接两个列表,按行的方向

数据分组cut
bins = [0, 18, 30, 50, 131]
group_age = ['少年', '青年', '中年', '老年']
cb['group_age'] = pd.cut(cb['age'], bins, labels=group_age)
cut的作用是分桶,它也是数据分析常用的一种方法,将不同数据划分出不同等级,也就是将数值型数据加工成分类数据。
cut可以等距划分,传入一个数字就可以。为了更好的区分,可以传入一组列表进行人工划分,加工成相应的标签。

五、数据提取或筛选
数据提取,也是数据分析中最常见的一个工作。这部分主要使用3个函数,即loc、iloc和ix。loc函数按标签值进行提取,iloc函数按位置进行提取,ix函数可以同时按标签和位置进行提取。

按标签提取loc
Loc函数按数据表的索引标签进行提取

按位置提取iloc
使用iloc函数按位置对数据表中的数据进行提取,这里冒号前后的数字不再是索引的标签名称,而是数据所在的位置,从0开始。

按标签和位置提取ix
ix是loc和iloc的混合,既能按索引标签提取,也能按位置进行数据提取。

按条件提取(区域和条件值)
除了按标签和位置提起数据以外,还可以按具体的条件进行数据。下面使用loc和isin两个函数配合使用,按指定条件对数据进行提取。
使用isin函数对city中的值是否为beijing进行判断
将isin函数嵌套到loc的数据提取函数中,将判断结果为Ture数据提取出来。这里我们把判断条件改为city值是否为beijing和shanghai。如果是就把这条数据提取出来。

六、数据汇总

groupby函数
df_clean.groupby('city')
df_clean.groupby('city').count()
df_clean.groupby('city').mean()
df_clean.groupby(['city','education']).mean()
按city列,针对不同城市进行了分组。它并没有返回分组后的结果,只返回了内存地址。这时它只是一个对象,没有进行任何的计算。
Groupby制定要分组的列名称就可以,也可以同时制定多个列名称,groupby按列名称出现的顺序进行分组。同时要制定分组后的汇总方式,常见的是计数和求和两种。
调用groupby的count方法,返回的是不同城市的各列计数结果。
调用groupby的mean方法,返回的是不同城市的平均薪资,mean方法只针对数值的列进行操作。
groupby可以传递一组列表,这时得到一组层次化的series。
df.groupby(df['key1']) #根据key1对df进行分组
df['key2'].groupby(df['key1'])  #根据key1对key2列进行分组
df['key3'].groupby(df['key1'], df['key2'])  #先根据key1、再根据key2对key3列进行分组
df['key2'].groupby(df['key1']).size() #size()返回一个含有分组大小的series
df.groupby(df['key1'])['data1']  等价于 df['data1'].groupby(df['key1'])
df.groupby(mapping, axis=1)  ser(mapping) #定义mapping字典,根据字典的分组来进行分组
df.groupby(len) #通过函数来进行分组,如根据len函数
df.groupby(...).transform(np.mean)   #transform()可以将其内的函数用于各个分组


数据透视表pivot_table函数
pd.pivot_table(df_inner,index=["city"],values=["price"],columns=["size"],aggfunc=[len,np.sum],fill_value=0,margins=True)

七、数据输出

df_inner.to_excel('Excel_to_Python.xlsx', sheet_name='bluewhale_cc')    #输出到excel格式
df_inner.to_csv('Excel_to_Python.csv')    #输出到CSV格式

八、函数

1agg函数
df_clean.groupby("companyShortName").avgSalary.agg(['count','mean']).sort_values(by = 'count',ascending = False)
df_clean.groupby('companyShortName').avgSalary.agg(lambda x: max(x) - min(x))
agg函数能针对分组后的列数据进行丰富多彩的计算。
使用agg函数,同时传入count和mean方法,然后返回不同公司的计数和平均值两个结果。
agg函数除了系统自带的几个函数,它也支持自定义函数。

apply函数
可以针对DateFrame中的一行或一列数据进行操作,允许使用自定义函数。
df_duplicates.salary.apply(cut_word)
df_duplicates.salary.apply(cut_word, method = 'top')

将word_cut函数应用在salary列的所有行。
apply中参数是添加在函数后面,而不是里面的。
agg和apply是不同的,虽然某些方法相近,比如求sum、count等,但是apply支持更细的粒度,它能按组进行复杂的运算,将数据拆分合并,而agg则必须固定为列。

九、时间序列

import datetime    #载入模块
cd['starttime'] = pd.to_datetime(cd[''starttime])    #对starttime设置日期格式
cd_month = cd.resample('M', how = len)    #降采样,把高频率数据聚合到低频率。按月对数据进行计数。
cd_quarterly = cd.resample('Q', how = len)    #按季对数据进行计数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值