Python数据分析(三):Numpy基本操作汇总

Numpy基本操作

Numpy、DataFrame和matplotlib可以说是数据分析师必会的三个模块,使用起来非常方便。

# 原数据
data0 = [['id', 'name', 'time', 'city', 'age', 'score', 'money', 'type'],
        [1011, '张三', '2019-09-11', '北京', 23, 82, 201, 'A1'],
        [1019, '李四', '2019-09-20', '北京', 35, 77, 150, 'A2'],
        [1109, '王五', '2020-09-18', '上海', 28, 90, 277, 'B2'],
        [1130, '钱六', '2020-09-29', '上海', 31, 88, 230, 'B1'],
        [1301, '赵七', '2020-09-07', '深圳', 29, 92, 300, 'C2'],
        [1328, '孙八', '2020-09-08', '深圳', 30, 81, 190, 'C1'],
        [1207, '张九', '2020-09-17', '广州', 39, 88, 210, 'D1'],
        [1277, '赵十', '2020-09-22', '广州', 28, 93, 250, 'D2']]
# 一般都会转为DataFrame格式
data = pd.DataFrame(data0[1:], index=None, columns=data0[0])

数据描述

  1. 数据描述 数据的行列数
data.shape
out:(8, 8)
  1. 数据示例
data.head() # 展示前几行数据
out:
     id name        time city  age  score  money type
0  1011   张三  2019-09-11   北京   23     82    201   A1
1  1019   李四  2019-09-20   北京   35     77    150   A2
2  1109   王五  2020-09-18   上海   28     90    277   B2
3  1130   钱六  2020-09-29   上海   31     88    230   B1
4  1301   赵七  2020-09-07   深圳   29     92    300   C2

# data.head(5) # 展示前5行数据
  1. 数据索引
# 列索引
data.columns
out:
	Index(['id', 'name', 'time', 'city', 'age', 'score', 'money', 'type'], dtype='object')
# 行索引
data.index
out:
	RangeIndex(start=0, stop=8, step=1)

数据切片

  1. iloc 通过位置来索引,0,1,2,…,iloc索引是左闭右开
  2. loc 通过标签来索引,‘id’,'name‘,…,loc索引是左闭右闭
data.iloc[1:3, 2:4]
out:
         time city
1  2019-09-20   北京
2  2020-09-18   上海

data.loc[1:3, ['time', 'city']
out:
         time city
1  2019-09-20   北京
2  2020-09-18   上海
3  2020-09-29   上海
  1. 进阶用法
data.loc[data['age'][(data['age'] > 10) & (data['age'] < 25)].index, 'age'] = '青少年'
# 将年龄大于10且小于25的年龄换成‘青少年’
data.loc[(data['score'].isnull()), 'score'] = 0
# 将'score'列为空的值转为0
a = data.loc[data['age'][(data['age']>20)|(data['age']<10)].index, 'name']
# 年龄大于20或小于10的人的名字

空值处理

  1. 剔除空值
# dropna()函数 axis=0表示纵向操作,axis=1表示横向操作
# drop()有个参数inplace,默认为False,表示是否修改源数据,为True则在源数据上修改,否则生成副部。
data.dropna(axis=0, inplace=False) # 删除包含空值的行
data.dropna(axis=1) # 删除包含空值的列
data.dropna(how='all', axis=0) # 删除整行均为空值的行
data.dropna(subset=['id', 'score'], axis=0) # 删除'id', 'score'包含空值的行
data.dropna(axis=0, thresh=n) # 删除所有小于n个空值的行
  1. 填充空值
# fillna()函数,axis和inplace参数同dropna()
data['city'].fillna('未知') # 用'未知'填充'city'中的空值
data['score'].fillna(data['score'].mean()) # 用'score'的平均值填充空值
data['score'].fillna(method='ffill') # 用上一个非空值填充
data['score'].fillna(random.randint(80, 100)) # 用随机数填充
  1. 筛选空值
data[data['city'].isnull()==True] # 筛选'city'为空的全部数据
data['city'].isnull()==True # 判断是否为空,返回布尔型,基于pandas
data['city'].isna()==True # 判断是否为空,返回布尔型,基于pandas
data['city'] is np.nan # 返回布尔型
data['mission'] == np.nan # 返回布尔型
np.isnan(data['mission']) == True # 返回布尔型
# 上面几种返回布尔型的判断空值的方法有一定差别

数据替换/重命名

  1. 数据替换
data['city'].replace('北京', 1) # 用1代替'北京'
data['city'].replace(['北京', '上海'], [1, 2]) # 用1代替'北京',2代替'上海'
  1. 重命名
# 更改行索引
data.rename(index={1: 'a', 2: 'b', 3: 'c'}) # 将行索引中的1,2,3分别换成'a','b','c'
data.renam(index=lambda x: expression) # 用lambda函数批量修改索引名
# 更改行索引
data.set_index('id') # 将id作为索引,而不是默认的0,1,2,...
# 更改列索引
data.rename(columns={'city': 'city_name', 'id': 'user_id'} 
# 将'city','id'换成'city_name','user_id'

数据统计

data.describe() # 查看数据值,列汇总统计,包含计数、均值、标准差、四分位数等
data.mean() # 所有列的均值
data.min(),data.max(),data.median() # 每一列的最小、最大、中位数、
data.std(),data.var() # 标准差、方差
data.corr() # 列与列之间的相关系数
data.count() # 列的非空值的个数
data.info() # 字段基本信息(类型、空值等)
data.unique() # 字段的唯一值

小结

Numpy和Pandas有很多的相似之处,因此,很多的操作我后面会放在Pandas的使用中说明,例如很重要的groupby()、merge()、apply()。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值