本帖最后由 有赞必回的帅哥 于 2018-9-5 16:16 编辑
Jupyter notebook学习Pandaspandas 是基于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-1
1-2 1.2 创建数据(Object Creation) 自己创建一些数据 1.2.1利用一个列表来生成数据并自动生成对应的索引: - #data是一个列表
- data=[1,3,5,np.nan,6,8]
- ps = pd.Series(data)
- print(ps)
复制代码
1-3 1.2.2 通过索引,标签,数据值生成一个 DataFrame - #以‘20130101’为基数,不断加1产生新的索引,periods=生成的索引数目
- dates = pd.date_range('20130101', periods=6)
- #通过数据生成时间,标签,数据值生成一个 DataFrame
- #np.random.randn(6,4)随机生成6行4列的数据,datas为刚才生成的索引,columns为列标签
- df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
复制代码
1-4 1.2.3通过字典生成一个DataFrame - #以‘20130101’为基数,不断加1产生新的索引,periods=生成的索引数目
- dates = pd.date_range('20130101', periods=6)
- #通过数据生成时间,标签,数据值生成一个 DataFrame
- #np.random.randn(6,4)随机生成6行4列的数据,datas为刚才生成的索引,columns为列标签
- df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
复制代码
1-5 1.3 数据可视化 可以通过这类方法去从各个角度浏览DataFrame,选择其中的值 本节用到的数据如下(dataframe): 1-6 1.3.1 - #查看DataFrame的索引
- df.index
- #查看所有列标签的名称
- df.columns
- #查看dataframe的所有值
- df.values
- #查看datafream各方面的值,(每列属性的)平均值,最大值,最小值,标准差
- df.describe()
复制代码
1-8 1.4 选择数据 选择满足某种特征的数据 本小节用到的数据如下(dataframe): 1-9 1.4.1 获取数据 选择列数据,选择行数据(两种方法,基于索引,基于位置) - #选择标签A列的数据
- df['A']
- #选择0到3行(不包括第三行)的数据,这种方法是基于位置的
- df[0:3]
- #选择索引‘20130102’到索引‘20130104’(包括‘20130104’)之间的数据,基于索引
- df['20130102':'20130104']
复制代码
1-10 1.4.2 通过标签来选择数据(Selection by Label) - #选择第0行的数据
- df.loc[dates[0]]
- #选择A,B两列标签的数据
- df.loc[:,['A','B']]
- #选择索引'20130102','20130104'之间,A,B两列标签的数据
- df.loc['20130102':'20130104',['A','B']]
复制代码
1-11 1.4.3 通过位置选择数据(Selection by Position) - 通过位置选取数据
- #选取第三行的数据
- df.iloc[3]
- #选取3~5行,0~2列的数据(不包含第5行,第2列)
- df.iloc[3:5,0:2]
- #选取1,2,4行,0,2列的数据
- df.iloc[[1,2,4],[0,2]]
复制代码
1-12 1.4.4 通过布尔变量来选择数据(Boolean Indexing) 通过布尔索引来选取数据 - #df是我们在前面创建的一个6行4列的datafream
- #选取A列值大于0的数据
- df[df.A > 0]
- #选取所有大于0的数据
- df[df > 0]
- #增添一列标签E数据
- df['E'] = ['one', 'one','two','three','four','three']
- #选取E列有值在['two','four']中的数据
- df['E'].isin(['two','four'])
复制代码
1-13 1.5 改变数据值 改变数据中某些位置的值 本小节用到的数据如下(dataframe): - #将第0行第A列的数据置为0
- df.at[dates[0],'A'] = 0
- #将0行1列的数据置为0
- df.iat[0,1] = 0
复制代码
1.6 缺失数据的操作(Missing Data) - #删除所有存在缺失值的行数据
- df1.dropna(how='any')
- #用某个值去补全所有缺失值(下面这句代码是将所有缺失值全部用5来代替)
- df1.fillna(value=5)
- #显示出所有数据的状态(是否存在缺失值,若为true则说明该位置存在缺失值)
- pd.isna(df1)
复制代码
1-15 1.7 对数据的一些操作(Operations) 对数据的一些操作(取平均值,排序等等) 本小节用到的数据如下(dataframe): - #求各列的平均值
- df.mean()
- #求第1列的平均值
- df.mean(1)
- s = pd.Series(np.random.randint(0, 7, size=10))
- #统计各个值的频数
- s.value_counts()
复制代码
1-16
1-17 1.8 合并数据(Merge) 合并数据的一些操作 本小节用到的df为两个新生成的df,下面有详细代码及截图。 - #生成一个dataframe,np.random.randn(10, 4)生成10行4列,值为随机数的df
- df = pd.DataFrame(np.random.randn(10, 4))
- #将df的前3行,以及第7行之后的行数据合并生成一个新的dataframe
- pd.concat([df[:3],df[7:]])
- s = df.iloc[3]
- #将s添加在df,位置会在最后一行
- df.append(s, ignore_index=True)
- #生成两个dataframe:left,right
- left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
- right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
- #将两个有不同标签的dataframe合并生成新的Dataframe
- pd.merge(left, right, on='key')
复制代码
1-18
1.9 数据分组(Grouping) 将数据根据某个属性分类。 数据如下(dataframe): 1-19 - #df是我们在前面创建的一个6行4列的datafream
- #将数据按照A,B两个标签来分类,A有两个属性值,B有三个属性值,则组合有2*3=6种,即分#为6类
- df.groupby(['A','B']).sum()
复制代码
1-20
|