赞
踩
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771
Pandas的主要应用包括:
Pandas的使用很灵活,最重要的两个数据类型是DataFrame和Series。
对DataFrame最直观的理解是把它当成一个Excel表格文件,如下:
索引是从0开始的,也可以将某一行设置为index索引;
missing value为缺失值。
DataFrame的一列就是Series,Series可以转化为dataframe,调用方法函数to_frame()
即可。
Series的常见操作如下:
- sis = Series([4,7,-5,3]
- sis.to_frame()
- sis.value_counts() # 统计每个唯一值的所有出现次数
- sis.size
- sis.shape
- sis.count() # 返回非缺失值的数目
- sis.min()
- sis.max()
- sis.median()
- sis.std()
- sis.sum()
- sis.describe() # 返回摘要统计信息和几个分位数
- sis.isnull() # 非空值
- sis.fillna(0) # 用0来补充缺失值
- #上述函数可以结合使用,如下
- sis.isnull().sum()# 统计空值的个数
创建数据帧的语法如下:
pd.DataFrame( data=None, index=None, columns=None, dtype=None, copy=False)
参数说明:
常见的几种创建数据帧的方式如下:
- pd.set_option("max_columns",10,"max_rows",20) # 设置最大列数和最大行数
- df = pd.DataFrame() # 空数据帧
- df = pd.DataFrame(['a','b','c','d']) # 从一维列表创建
- df = pd.DataFrame([['Alex',10],['Bob',12],['Clarke',13]], dtype=float) # 从二维列表创建,浮点型数字
- df = pd.DataFrame({'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}) # 从字典创建,字典键默认为列标签
列名参与代数运算,表示列中每一个元素都与该数字进行同样的操作,如下:
- movie = pd.read_csv('movie.csv')
- imdb_score = movie['imdb_score']
- imdb_score + 1 # 每一个列值加1
- imdb_score * 2.5 # 给每一个列值乘2.5
- imdb_score > 7 # 判断每一个列值是否大于7
- imdb_score=="hello" # 判断是否等于字符串
- imdb_score.floordiv(7) # imdb_score // 7,整数除法
- imdb_score.gt(7) # imdb_score > 7
- imdb_score.eq('James Cameron') # imdb_score == 'James Cameron'
- type(imdb_score)
- imdb_score.astype(int).mod(5) #每一个列值取模
-
- sex_age = wl_melt['sex_age'].str.split(expand=True) # 对列使用字符串的多个方法
创建、删除列,通过[列名]
来完成,如下:
- movie["new_col"]=0
- movie.insert(0, 'id', np.arange(len(movie))) # 插入新的列
- movie["new_col"].all() #用来检测所有的布尔值都为True,用于比较两列是否相等
设置索引相关操作:
- movie2 = movie.set_index('movie_title') # set_index()给行索引命名
- movie2.reset_index() #复原索引
- movie.rename(index=,columns=) # 其中参数值为键值对,键为旧值,值为新值。
- movie.columns.tolist()
- movie.columns=new_columns
-
- # 索引第1个行索引的值
- idx = pd.Index(list('abc'))
- idx.get_level_values(0)
特殊的列选择如下:
- movie.get_dtype_counts() # 输出每种特定数据类型的列数
- movie.select_dtypes(include=['int']).head() # 仅选择整数列
- movie.filter(like='facebook').head() # like参数表示包含此字符串
- movie.filter(regex='\d').head() # movie.filter支持正则表达式
- movie.filter(items=['actor_1_name', 'asdf']) # 传入精确列名的列表
添加新行,用loc
指定:
- new_data_list = ['Aria', 1]
- names.loc[4] = new_data_list
- #等价于
- names.loc[4] = ['Aria', 1]
- names.append({'Name':'Aria', 'Age':1}, ignore_index=True) # append方法可以同时添加多行,此时要放在列表中
- data_dict = bball_16.iloc[0].to_dict()
- # keys参数可以给两个DataFrame命名,names参数可以重命名每个索引层
- pd.concat(s_list, keys=['2016', '2017'], names=['Year', 'Symbol'])
- pres_41_45['President'].value_counts()
选取多个列时,参数用中括号[]
括起来:
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()
对整个数据帧的操作:
- movie.shape
- movie.count()
- movie.min() # 各列的最小值
- movie.isnull().any().any() # 判断整个DataFrame有没有缺失值,方法是连着使用两个any
-
- movie.isnull().sum() # 统计缺失值最主要方法是使用isnull方法
- movie.sort_values('UGDS_HISP', ascending=False)# 按照某一列排序
- movie.dropna(how='all')# 如果所有列都是缺失值,则将其去除
pd.to_datetime
能够将整个列表或一系列字符串或整数转换为时间戳。
使用如下:
- s = pd.Series(['12-5-2015', '14-1-2013', '20/12/2017', '40/23/2017'])
- pd.to_datetime(s, dayfirst=True, errors='coerce')
时间戳操作如下:
- pd.Timestamp(year=2012, month=12, day=21, hour=5,minute=10, second=8, microsecond=99)
- pd.Timestamp('2016/1/10')
- pd.Timestamp('2016-01-05T05:34:43.123456789')
- pd.Timestamp(500) # 可以传递整数,表示距离1970-01-01 00:00:00.000000000的毫秒数
- pd.to_datetime('2015-5-13') # 类似函数有pd.to_dataframe
to_timedelta()
方法可以产生一个Timedelta对象,还可以和Timestamp互相加减,甚至可以相除返回一个浮点数,如下:
- # to_timedelta产生Timedelta对象。
- pd.Timedelta('12 days 5 hours 3 minutes 123456789 nanoseconds')
- time_strings = ['2 days 24 minutes 89.67 seconds', '00:45:23.6']
- pd.to_timedelta(time_strings)
- # Timedeltas和Timestamps互相加减
- pd.Timedelta('12 days 5 hours 3 minutes') * 2
- ts = pd.Timestamp('2016-10-1 4:23:23.9')
- ts.ceil('h') # Timestamp('2016-10-01 05:00:00')
- td.total_seconds()
可以在导入的时候将时间列设为index,然后可以加快速度,时间支持部分匹配:
- # REPORTED_DATE设为了行索引,所以就可以进行智能Timestamp对象切分。
- crime = crime.set_index('REPORTED_DATE')# .sort_index()
- crime.loc['2016-05-12 16:45:00']
- # 选取2012-06的数据
- crime.loc[:'2012-06']
- crime.loc['2016-05-12']
-
- # 也可以选取一整月、一整年或某天的某小时
- crime.loc['2016-05'].shape
- crime.loc['2016'].shape
- crime.loc['2016-05-12 03'].shape
- crime.loc['Dec 2015'].sort_index()
-
- # 用at_time方法选取特定时间
- crime.at_time('5:47').head()
- crime.plot(figsize=(16,4), title='All Denver Crimes')
- 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 |
- college = pd.read_csv('college.csv')
- employee = pd.read_csv('employee.csv')
- college.head()
- college.shape
- display(college.describe(include=[np.number]).T) # 统计数值列,并进行转置
直接在序列或数据帧之后加[]
即可选择指定的数据集。
.iloc
索引器只按整数位置进行选择,其工作方式与Python列表类似,区间为前闭后开;.loc
索引器只按索引标签进行选择,这与Python字典的工作方式类似,区间为后闭后开。
它们对行列均可以选择。
使用如下:
- college.iloc[:, [4,6]].head( ) # 选取两列的所有的行
- college.loc[:, ['WOMENONLY', 'SATVRMID']]
- college.iloc[[60, 99, 3]].index.tolist() # .index.tolist()可以直接提取索引标签,生成一个列表
- college.iloc[5, -4] # 整数索引
- college.loc['The University of Alabama', 'PCTFLOAN'] # 标签索引
- college[10:20:2] # 逐行读取
-
- # Series也可以进行同样的切片
- city = college['CITY']
- city[10:20:2]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。