文章目录
Pandas数据分析-Task2
记录DataWhale的Pandas数据分析的学习过程,使用的教材为 joyful-pandas。
Task2是pandas的基础,包含文件读取与写入,Series与DataFrame,常用函数,窗口对象。最后是练习题。本篇文章中所有的代码示例中用到的原始文件都可以在此链接中下载。
文件读取与写入
文件读取
常用pandas读取csv,txt,excel等格式的文件,其对应的函数为pd.read_csv(),pd.read_table(),pd.read_excel()函数,由于这三个函数的用法基本一致,所以以read_csv()为例做介绍。
pandas.read_csv(filepath_or_buffer, sep=',' header='infer',parse_dates=False,usecols=None, nrows=None)
其中,filepath_or_buffer是文件的路径;sep是分隔符,由于是read_csv函数,所以默认分割符是逗号;header用来设置原文件的第一行是否为列名,默认值是’infer’,即默认第一行做列名,如果不想第一行做列名,需要手动设置header=None; parse_dates指的是将某一列转化为时间值;usecols表示读读取哪几列,把要读取的列名以列表的形式赋值即可;nrows表示读取几行,是一个整数,默认从第0行开始算。一下是例子:
csv=pd.read_csv('data/my_csv.csv',usecols=['col1','col2','col5'],nrows=2,parse_dates=['col5'])
此语句的意思为,读取路径为’data/my_csv.csv’的csv文件,文件的第一行作列名,只读取 ‘col1’ 和 ‘col2’ ,‘col5’ 这三列,每列只读取两行,同时将’ col5’ 转化为时间。
文件写入
文件写入也比较简单,直接调用Series或DataFrame类型的 to_csv()、to_excel()方法即可,注意没有 to_txt()方法,因为to_csv()方法就可以保存txt文件。保存的时候可以去掉索引,并自定义分割符,如:
df_txt.to_csv('data/my_txt_saved.txt', sep='\t', index=False)
此语句的意思是将df_txt变量保存为my_txt_saved.txt文件,同时分隔符为制表符,不保存变量中的索引。
Series与DataFrame
pandas中最基本的数据类型为Series与DataFrame。Series可以由一组数据与其所对应的索引index组成,对应的轴为0轴。DataFrame是一个二维的数据结构,多了一维数据,同样也多了一维索引column,对应的轴为1轴。
Series可以由列表、字典、ndarray创建;DataFrame可以由二维ndarray,字典等创建。以DataFrame的创建为例:
df=pd.DataFrame(data={
'col1':[1,2,3],'col2':[4,5,6],'col3':[7,8,9]},index=['row1','row2','row3'])
>
> col1 col2 col3
row1 1 4 7
row2 2 5 8
row3 3 6 9
常用函数
统计函数
统计函数在处理数值型特征时很有用,常见的统计函数有sum, mean, median, var, std, max, min。还有一些不常见的函数,如quantile()函数是求分位数;idxmax()函数求最大值对应的索引;count()函数更常用,是求非缺失值个数的。需要注意的是,这些统计函数又称为聚合函数,输入的是向量,输出的是表露,所以必须沿着一个轴来进行运算,在pandas中,这些统计函数默认是沿着axis=0轴进行运算的,在机器学习中,我们通常把一行数据作为一个样本,一列数据作为一个特征的所有取值,所以统计函数一般是按列进行统计计算的。
去重复值函数
对Series这种单列的数据去重,常用的函数有:unique
nunique
对序列使可以分别得到其唯一值组成的列表和唯一值的个数:
- unique()函数,返回去重后唯一值组成的列表。
- nunique()函数,返回唯一值的个数。
- value_counts() 函数,返回到唯一值和其对应出现的频次。
如果要对多个列进行去重,需要用函数drop_duplicates(),用法为:
DataFrame.drop_duplicates(subset=None, keep='first')
其中,subset是列标号组成的列表,即需要进行去重的列;keep参数有三个值,默认值first表示每个组合保留第一次出现的所在行,last 表示保留最后一次出现的所在行,False表示把所有重复组合所在的行剔除。
替换函数
替换函数是针对与某一列进行,即Series类型的变量。替换函数可分为三类:映射替换、逻辑替换和数值替换。
1.映射替换:replace()函数,通过字典或者列表来进行替换,例如:
df['Gender'].replace({
'Female':0, 'Male':1})
df['Gender'].replace(['Female','Male'],[0,1])
都表示将’Gender’这一列中的值为’Female’的替换为0,把值为’Male’的替换为1。
2.逻辑替换:where() 函数和mask()函数,两者功能基本一致。区别在于where 函数在传入条件为False 的对应行进行替换,而mask 在传入条件为True 的对应行进行替换。例如:
s = pd.Series([-1, 1.2345, 100, -50])
s.where(s<0, 100)
s.mask(s>0,100)
其中,where和mask函数的结果都一样,都表示将s中大于0的数替换为100.
3.数值替换:常用的有round, abs, clip 方法,分别表示取整、取绝对值和截断,round和abs比较简单,下面通过例子介绍一下clip函数。
s = pd.Series([-1, 1.2345, 100, -50])
s.clip(0