易学智能

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2284|回复: 4

Jupyter notebook接力赛(6)Jupyter notebook学习Pandas

[复制链接]

1

主题

22

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2018-9-5 15:56:37 | 显示全部楼层 |阅读模式
本帖最后由 有赞必回的帅哥 于 2018-9-5 16:16 编辑

Jupyter notebook学习Pandas
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法
1.1 读取数据(Getting Data In)
CSV文件的读取
#Titanic.csv是一个泰坦尼克号乘客信息数据集,用于做泰坦尼克生还预测。
#有891行,12个属性列(passenger:乘客ID,Survived:是否存活,Pclass:乘客等级,Name:姓名,Sex:性别,Age:年龄,Sibsp:兄弟配偶数,Parch:父母孩子数,Ticket:船票号,Fare:票价,cabin:船舱,Enbarked:登录港口)


1.png
1-1
2.png

1-2
1.2 创建数据(Object Creation
   自己创建一些数据
1.2.1利用一个列表来生成数据并自动生成对应的索引:
  1. #data是一个列表
  2. data=[1,3,5,np.nan,6,8]
  3. ps = pd.Series(data)
  4. print(ps)
复制代码


3.png
1-3
1.2.2 通过索引,标签,数据值生成一个 DataFrame
  1. #以‘20130101’为基数,不断加1产生新的索引,periods=生成的索引数目
  2. dates = pd.date_range('20130101', periods=6)
  3. #通过数据生成时间,标签,数据值生成一个 DataFrame
  4. #np.random.randn(6,4)随机生成6行4列的数据,datas为刚才生成的索引,columns为列标签
  5. df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
复制代码



4.png
1-4
1.2.3通过字典生成一个DataFrame
  1. #以‘20130101’为基数,不断加1产生新的索引,periods=生成的索引数目
  2. dates = pd.date_range('20130101', periods=6)
  3. #通过数据生成时间,标签,数据值生成一个 DataFrame
  4. #np.random.randn(6,4)随机生成6行4列的数据,datas为刚才生成的索引,columns为列标签
  5. df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
复制代码


5.png
1-5
1.3 数据可视化
   可以通过这类方法去从各个角度浏览DataFrame,选择其中的值
本节用到的数据如下(dataframe:
6.png
1-6
1.3.1
  1. #查看DataFrame的索引
  2. df.index
  3. #查看所有列标签的名称
  4. df.columns
  5. #查看dataframe的所有值
  6. df.values
  7. #查看datafream各方面的值,(每列属性的)平均值,最大值,最小值,标准差
  8. df.describe()
复制代码



7.png
1-7
8.png
1-8
1.4 选择数据
选择满足某种特征的数据
本小节用到的数据如下(dataframe):
9.png
1-9
1.4.1 获取数据
选择列数据,选择行数据(两种方法,基于索引,基于位置)
  1. #选择标签A列的数据
  2. df['A']
  3. #选择0到3行(不包括第三行)的数据,这种方法是基于位置的
  4. df[0:3]
  5. #选择索引‘20130102’到索引‘20130104’(包括‘20130104’)之间的数据,基于索引
  6. df['20130102':'20130104']

复制代码

10.png
1-10
1.4.2 通过标签来选择数据(Selection by Label
  1. #选择第0行的数据
  2. df.loc[dates[0]]
  3. #选择A,B两列标签的数据
  4. df.loc[:,['A','B']]
  5. #选择索引'20130102','20130104'之间,A,B两列标签的数据
  6. df.loc['20130102':'20130104',['A','B']]
复制代码



11.png
1-11
1.4.3 通过位置选择数据(Selection by Position
  1. 通过位置选取数据
  2. #选取第三行的数据
  3. df.iloc[3]
  4. #选取3~5行,0~2列的数据(不包含第5行,第2列)
  5. df.iloc[3:5,0:2]
  6. #选取1,2,4行,0,2列的数据
  7. df.iloc[[1,2,4],[0,2]]
复制代码


12.png
1-12
1.4.4 通过布尔变量来选择数据(Boolean Indexing
通过布尔索引来选取数据
  1. #df是我们在前面创建的一个6行4列的datafream
  2. #选取A列值大于0的数据
  3. df[df.A > 0]
  4. #选取所有大于0的数据
  5. df[df > 0]
  6. #增添一列标签E数据
  7. df['E'] = ['one', 'one','two','three','four','three']
  8. #选取E列有值在['two','four']中的数据
  9. df['E'].isin(['two','four'])
复制代码

13.png
1-13
1.5 改变数据值
     改变数据中某些位置的值
本小节用到的数据如下(dataframe):
14.png
1-14
  1. #将第0行第A列的数据置为0
  2. df.at[dates[0],'A'] = 0
  3. #将0行1列的数据置为0
  4. df.iat[0,1] = 0
复制代码


1.6 缺失数据的操作(Missing Data
  1. #删除所有存在缺失值的行数据
  2. df1.dropna(how='any')
  3. #用某个值去补全所有缺失值(下面这句代码是将所有缺失值全部用5来代替)
  4. df1.fillna(value=5)
  5. #显示出所有数据的状态(是否存在缺失值,若为true则说明该位置存在缺失值)
  6. pd.isna(df1)
复制代码


15.png
1-15
1.7 对数据的一些操作(Operations
对数据的一些操作(取平均值,排序等等)
本小节用到的数据如下(dataframe
16.png
  1. #求各列的平均值
  2. df.mean()
  3. #求第1列的平均值
  4. df.mean(1)
  5. s = pd.Series(np.random.randint(0, 7, size=10))
  6. #统计各个值的频数
  7. s.value_counts()
复制代码

1-16

17.png
1-17
1.8 合并数据(Merge)
合并数据的一些操作
本小节用到的df为两个新生成的df,下面有详细代码及截图。
  1. #生成一个dataframe,np.random.randn(10, 4)生成10行4列,值为随机数的df
  2. df = pd.DataFrame(np.random.randn(10, 4))
  3. #将df的前3行,以及第7行之后的行数据合并生成一个新的dataframe
  4. pd.concat([df[:3],df[7:]])
  5. s = df.iloc[3]
  6. #将s添加在df,位置会在最后一行
  7. df.append(s, ignore_index=True)
  8. #生成两个dataframe:left,right
  9. left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
  10. right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
  11. #将两个有不同标签的dataframe合并生成新的Dataframe
  12. pd.merge(left, right, on='key')
复制代码


18.png
1-18

1.9 数据分组(Grouping)
将数据根据某个属性分类。
数据如下(dataframe:
19.png
1-19
  1. #df是我们在前面创建的一个6行4列的datafream

  2. #将数据按照A,B两个标签来分类,A有两个属性值,B有三个属性值,则组合有2*3=6种,即分#为6类

  3. df.groupby(['A','B']).sum()
复制代码




20.png
1-20

回复

使用道具 举报

44

主题

139

帖子

382

积分

论坛管理

Rank: 4

积分
382
发表于 2018-9-29 10:36:33 | 显示全部楼层
可以很实用
回复

使用道具 举报

5

主题

53

帖子

130

积分

注册会员

Rank: 2

积分
130
发表于 2018-10-8 08:11:57 | 显示全部楼层
还可以,比网上的一些教程详细多了
回复

使用道具 举报

3

主题

55

帖子

131

积分

注册会员

Rank: 2

积分
131
发表于 2018-10-8 08:27:45 | 显示全部楼层
基本上能够应付一些pandas的基本操作
回复

使用道具 举报

9

主题

47

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2018-10-10 08:43:06 | 显示全部楼层
楼主讲的好详细啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易学智能

GMT+8, 2024-12-22 13:46 , Processed in 0.024905 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表