当前位置:   article > 正文

万字长文,Python数据分析实战,使用Pandas进行数据分析_熟练习使用python语言,掌握pandas的基础使用,掌握用pandas进行数据挖掘与分析

熟练习使用python语言,掌握pandas的基础使用,掌握用pandas进行数据挖掘与分析

文章目录

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771

 

一、Pandas的使用

1.Pandas介绍

Pandas的主要应用包括:

  • 数据读取
  • 数据集成
  • 透视表
  • 数据聚合与分组运算
  • 分段统计
  • 数据可视化

Pandas的使用很灵活,最重要的两个数据类型是DataFrameSeries

对DataFrame最直观的理解是把它当成一个Excel表格文件,如下:
dataframe

索引是从0开始的,也可以将某一行设置为index索引;
missing value为缺失值。

DataFrame的一列就是Series,Series可以转化为dataframe,调用方法函数to_frame()即可。

2.Pandas基本操作

Series的操作

Series的常见操作如下:

  1. sis = Series([4,7,-5,3]
  2. sis.to_frame()
  3. sis.value_counts() # 统计每个唯一值的所有出现次数
  4. sis.size
  5. sis.shape
  6. sis.count() # 返回非缺失值的数目
  7. sis.min()
  8. sis.max()
  9. sis.median()
  10. sis.std()
  11. sis.sum()
  12. sis.describe() # 返回摘要统计信息和几个分位数
  13. sis.isnull() # 非空值
  14. sis.fillna(0) # 用0来补充缺失值
  15. #上述函数可以结合使用,如下
  16. sis.isnull().sum()# 统计空值的个数

创建DataFrame

创建数据帧的语法如下:

pd.DataFrame( data=None, index=None, columns=None, dtype=None, copy=False)

参数说明:

  • data:可选数据类型,如:ndarray,series,map,lists,dict,constant和另一个DataFrame
  • index:行标签索引,缺省值np.arrange(n),不计入df列
  • columns:列标签索引,缺省值np.arrange(n),不计入df行
  • dtype:每列的数据类型
  • copy:默认值False,引用/复制数据

常见的几种创建数据帧的方式如下:

  1. pd.set_option("max_columns",10,"max_rows",20) # 设置最大列数和最大行数
  2. df = pd.DataFrame() # 空数据帧
  3. df = pd.DataFrame(['a','b','c','d']) # 从一维列表创建
  4. df = pd.DataFrame([['Alex',10],['Bob',12],['Clarke',13]], dtype=float) # 从二维列表创建,浮点型数字
  5. df = pd.DataFrame({'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}) # 从字典创建,字典键默认为列标签

常见列操作

列名参与代数运算,表示列中每一个元素都与该数字进行同样的操作,如下:

  1. movie = pd.read_csv('movie.csv')
  2. imdb_score = movie['imdb_score']
  3. imdb_score + 1 # 每一个列值加1
  4. imdb_score * 2.5 # 给每一个列值乘2.5
  5. imdb_score > 7 # 判断每一个列值是否大于7
  6. imdb_score=="hello" # 判断是否等于字符串
  7. imdb_score.floordiv(7) # imdb_score // 7,整数除法
  8. imdb_score.gt(7) # imdb_score > 7
  9. imdb_score.eq('James Cameron') # imdb_score == 'James Cameron'
  10. type(imdb_score)
  11. imdb_score.astype(int).mod(5) #每一个列值取模
  12. sex_age = wl_melt['sex_age'].str.split(expand=True) # 对列使用字符串的多个方法

创建、删除列,通过[列名]来完成,如下:

  1. movie["new_col"]=0
  2. movie.insert(0, 'id', np.arange(len(movie))) # 插入新的列
  3. movie["new_col"].all() #用来检测所有的布尔值都为True,用于比较两列是否相等

设置索引相关操作:

  1. movie2 = movie.set_index('movie_title') # set_index()给行索引命名
  2. movie2.reset_index() #复原索引
  3. movie.rename(index=,columns=) # 其中参数值为键值对,键为旧值,值为新值。
  4. movie.columns.tolist()
  5. movie.columns=new_columns
  6. # 索引第1个行索引的值
  7. idx = pd.Index(list('abc'))
  8. idx.get_level_values(0)

特殊的列选择如下:

  1. movie.get_dtype_counts() # 输出每种特定数据类型的列数
  2. movie.select_dtypes(include=['int']).head() # 仅选择整数列
  3. movie.filter(like='facebook').head() # like参数表示包含此字符串
  4. movie.filter(regex='\d').head() # movie.filter支持正则表达式
  5. movie.filter(items=['actor_1_name', 'asdf']) # 传入精确列名的列表

常见行操作

添加新行,用loc指定:

  1. new_data_list = ['Aria', 1]
  2. names.loc[4] = new_data_list
  3. #等价于
  4. names.loc[4] = ['Aria', 1]
  5. names.append({'Name':'Aria', 'Age':1}, ignore_index=True) # append方法可以同时添加多行,此时要放在列表中
  6. data_dict = bball_16.iloc[0].to_dict()
  7. # keys参数可以给两个DataFrame命名,names参数可以重命名每个索引层
  8. pd.concat(s_list, keys=['2016', '2017'], names=['Year', 'Symbol'])
  9. pres_41_45['President'].value_counts()

DateFrame的基本操作

选取多个列时,参数用中括号[]括起来:

movie[['actor_1_name', 'actor_2_name',]] # 里面那个[]不要少

方法链:
点记号.表示函数调用顺序的方式,要求为返回值必须为另外一个对象,如下:

person.drive('store').buy('food').drive('home').prepare('food').cook('food').serve('food').eat('food').cleanup('dishes')

DataFrame中操作如下:

actor_1_fb_likes.fillna(0).astype(int).head()

对整个数据帧的操作:

  1. movie.shape
  2. movie.count()
  3. movie.min() # 各列的最小值
  4. movie.isnull().any().any() # 判断整个DataFrame有没有缺失值,方法是连着使用两个any
  5. movie.isnull().sum() # 统计缺失值最主要方法是使用isnull方法
  6. movie.sort_values('UGDS_HISP', ascending=False)# 按照某一列排序
  7. movie.dropna(how='all')# 如果所有列都是缺失值,则将其去除

时间操作

pd.to_datetime能够将整个列表或一系列字符串或整数转换为时间戳

使用如下:

  1. s = pd.Series(['12-5-2015', '14-1-2013', '20/12/2017', '40/23/2017'])
  2. pd.to_datetime(s, dayfirst=True, errors='coerce')

时间戳操作如下:

  1. pd.Timestamp(year=2012, month=12, day=21, hour=5,minute=10, second=8, microsecond=99)
  2. pd.Timestamp('2016/1/10')
  3. pd.Timestamp('2016-01-05T05:34:43.123456789')
  4. pd.Timestamp(500) # 可以传递整数,表示距离1970-01-01 00:00:00.000000000的毫秒数
  5. pd.to_datetime('2015-5-13') # 类似函数有pd.to_dataframe

to_timedelta()方法可以产生一个Timedelta对象,还可以和Timestamp互相加减,甚至可以相除返回一个浮点数,如下:

  1. # to_timedelta产生Timedelta对象。
  2. pd.Timedelta('12 days 5 hours 3 minutes 123456789 nanoseconds')
  3. time_strings = ['2 days 24 minutes 89.67 seconds', '00:45:23.6']
  4. pd.to_timedelta(time_strings)
  5. # Timedeltas和Timestamps互相加减
  6. pd.Timedelta('12 days 5 hours 3 minutes') * 2
  7. ts = pd.Timestamp('2016-10-1 4:23:23.9')
  8. ts.ceil('h') # Timestamp('2016-10-01 05:00:00')
  9. td.total_seconds()

可以在导入的时候将时间列设为index,然后可以加快速度,时间支持部分匹配

  1. # REPORTED_DATE设为了行索引,所以就可以进行智能Timestamp对象切分。
  2. crime = crime.set_index('REPORTED_DATE')# .sort_index()
  3. crime.loc['2016-05-12 16:45:00']
  4. # 选取2012-06的数据
  5. crime.loc[:'2012-06']
  6. crime.loc['2016-05-12']
  7. # 也可以选取一整月、一整年或某天的某小时
  8. crime.loc['2016-05'].shape
  9. crime.loc['2016'].shape
  10. crime.loc['2016-05-12 03'].shape
  11. crime.loc['Dec 2015'].sort_index()
  12. # 用at_time方法选取特定时间
  13. crime.at_time('5:47').head()
  14. crime.plot(figsize=(16,4), title='All Denver Crimes')
  15. crime_sort.resample('QS-MAR')['IS_CRIME', 'IS_TRAFFIC'].sum().head()

Pandas中关于时间的概念和比较如下:

时间类型 标量类 数组类 pandas数据类型 基本创建方法
Date times Timestamp DatetimeIndex datetime64[ns] or datetime64[ns, tz] to_datetime or date_range
Time deltas Timedelta TimedeltaIndex timedelta64[ns] to_timedelta or timedelta_range
Time spans Period PeriodIndex period[freq] Period or period_range  
Date offsets DateOffset None None DateOffset

3.Pandas进行数据分析

读取数据

  1. college = pd.read_csv('college.csv')
  2. employee = pd.read_csv('employee.csv')
  3. college.head()
  4. college.shape
  5. display(college.describe(include=[np.number]).T) # 统计数值列,并进行转置

选择数据子集

直接在序列或数据帧之后加[]即可选择指定的数据集。

.iloc索引器只按整数位置进行选择,其工作方式与Python列表类似,区间为前闭后开;
.loc索引器只按索引标签进行选择,这与Python字典的工作方式类似,区间为后闭后开。
它们对行列均可以选择。

使用如下:

  1. college.iloc[:, [4,6]].head( ) # 选取两列的所有的行
  2. college.loc[:, ['WOMENONLY', 'SATVRMID']]
  3. college.iloc[[60, 99, 3]].index.tolist() # .index.tolist()可以直接提取索引标签,生成一个列表
  4. college.iloc[5, -4] # 整数索引
  5. college.loc['The University of Alabama', 'PCTFLOAN'] # 标签索引
  6. college[10:20:2] # 逐行读取
  7. # Series也可以进行同样的切片
  8. city = college['CITY']
  9. city[10:20:2]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/601074
推荐阅读
相关标签
  

闽ICP备14008679号