Pandas数据探索

Pandas数据探索

  1. 查看数据
  2. 排序
  3. 索引和获取数据
  4. 应用函数到单元格、列、行
  5. 分组
  6. 汇总表
  7. 增删行列

pandas主要数据结构是Series和DataFrame类
1、series是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)及一组与之相关的数据标签(即索引)组成。
2、DataFrame是一个二维数据结构,即一张格,其中每列数据的类型相同。你可以把它看成由 Series 实例构成的字典。

首先载入必要的库,即 NumPy 和 Pandas

import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings('ignore')

后两行表示在编译过程中忽略警告信息。

查看数据

df.head() 查看前 5 行数据。
df.shape查看该数据库的维度,行数和列数。
df.columns查看该数据库的特征名称,即列名。
df.info()查看该数据库的特征类型,注意是否有缺失值。
df.describe()可以显示数值特征(int64 和 float64)的基本统计学特性,如未缺失值的数值、均值、标准差、范围、四分位数等。
df.describe(include=[‘object’, ‘bool’])查看非数值特征的统计数据。

astype() 方法可以更改列的类型:
如:df[‘列名’] = df[‘列名’].astype(‘int64’)
value_counts() 方法可以查看类别(类型为 object )和布尔值(类型为 bool )特征:
如:df[‘列名’].value_counts() ——>显示的是数值
df[‘列名’].value_counts(normalize=True) ———>显示的是比例
问题:数据集中有多少男性和女性?

data['sex'].value_counts()

排序

1、根据一列排序
df.sort_values(by=‘列名’, ascending=False)
表示根据某个列名排序。ascending=False表示倒序排列;ascending=True表示升序排列。
2、根据多列排序
df.sort_values(by=[‘列名1’, ‘列名2’],ascending=[True, False])
表示先按 列名1 升序排列,再按 列名2 降序排列

索引和获取数据

df[‘列名’]得到单独的列
df[P(df[‘Name’])]布尔值索引获取单独的列
如:df[df[‘列名’] == 1].mean()表示当列名的值为1的数的均值。
df[df[‘列名1’] == 1][‘列名2’].mean()表示在列名1的值为1的情况下。对应列名2的均值。
问题:数据集中女性的平均年龄是多少?

data[data['sex'] == 'Female']['age'].mean()

问题:统计男性高收入人群中未婚(包含离婚和分居)人群各自所占数量。

 data[(data['sex'] == 'Male') &(data['marital-status'].isin(['Never-married', 'Separated', 'Divorced']))]['salary'].value_counts()

DataFrame 可以通过列名、行名、行号进行索引。loc 方法为通过名称索引,iloc 方法为通过数字索引。
df.loc[0:5, ‘列名1’:‘列名2’]表示输出0到5行,列名1到列名2的数据。
df.iloc[0:5, 0:3]表示输出前 5 行的前 3 列数据。
df[:1] 和 df[-1:] 可以得到 DataFrame 的首行和末行。

应用函数到单元格、列、行

df.apply(np.max)表示应用函数 max 至每一列,即输出每列的最大值。
map() 方法可以通过一个 {old_value:new_value} 形式的字典替换某一列中的值。
如:d = {‘No’: False, ‘Yes’: True}
df[‘列名’] = df[‘列名’].map(d)
将列名中所有的No替换为False,所有的Yes替换为True。
df = df.replace({‘列名’: d})
当然,使用 repalce() 方法一样可以达到替换的目的。

分组

Pandas 下分组数据的一般形式为:
df.groupby(by=grouping_columns)[columns_to_show].function()
根据 grouping_columns 的值进行分组。
接着,选中感兴趣的列(columns_to_show)。若不包括这一项,那么就会选中所有非 groupby 列(即除 grouping_colums 外的所有列)。
最后,应用一个或多个函数(function)。

汇总表

一、透视表
透视表(Pivot Table)是电子表格程序和其他数据探索软件中一种常见的数据汇总工具。它根据一个或多个键对数据进行聚合,并根据行和列上的分组将数据分配到各个矩形区域中

通过 pivot_table() 方法可以建立透视表,其参数如下:

values 表示需要计算的统计数据的变量列表
index 表示分组数据的变量列表
aggfunc 表示需要计算哪些统计数据,例如,总和、均值、最大值、最小值等。
如:df.pivot_table([‘列名1’, ‘列名2’, ‘列名3’], [‘分组变量列’], aggfunc=‘mean’)

二、交叉表
交叉表(Cross Tabulation)是一种用于计算分组频率的特殊透视表,在 Pandas 中一般使用 crosstab() 方法构建交叉表。
如:pd.crosstab(df[‘列1’], df[‘列2’])——>显示的是数值
pd.crosstab(df[‘列1’], df[‘列2’], normalize=True)——>显示的是比例
问题:计算各国超过和低于 50K 人群各自的平均周工作时长。

pd.crosstab(data['native-country'], data['salary'],
            values=data['hours-per-week'], aggfunc=np.mean).T

增删行列

增:
使用 insert()方法添加列
df.insert(loc=len(df.columns), column=‘添加的列名’, value=值)
减:
使用 drop() 方法删除列和行
移除先前创捷的列:
df.drop([‘列名1’, ‘列名2’], axis=1, inplace=True)axis=1表示列,inplace 参数表示是否修改原始 DataFrame
删除行:
df.drop([1, 2]).head()

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值