python大数据分析——pandas基本数据类型类型及操作(DataFrame,数据选择函数,iloc & loc)


前言

python用于数据分析,需要使用 pandas 库。

一、pandas是什么?

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的,提供了大量能使我们快速便捷地处理数据的函数和方法。

为什么学?
numpy能够帮助我们处理数值,但是pandas除了处理数值之外还能处理其他类型的数据(如字符串)

二、使用步骤

1.引入库

pandas有两种数据类型

  • Series:一维,带标签(即索引)数组
  • DataFrame:二维,Series容器。任取 DataFrame 的一行或一列,都是一个 Series。

下面介绍如何使用 DataFrame。

import pandas as pd
from pandas import DataFrame

2.使用库

1)构建DataFrame

参考:pandas初探:DataFrame生成,索引与修改

  • 列标签为字典的键——通过columns属性显式指定列排列顺序
  • 行标签未显式指定,故默认为0到n-1——通过index属性显式指定行标签

缺少的值会用 NAN 填充。

有两种方法可以构建 DataFrame:

  • 直接构建:pd.DataFrame(np.arange(12).reshape((3,4)), index=list("abc"), columns=list("wxyz"))
  • 通过字典构建:pd.DataFrame(字典)
# 字典
data = {'ID': ['000001', '000002', '000003', '000004', '000005', '000006', '000007'],
        'name': ['黎明', '赵怡春', '张富平', '白丽', '牛玉德', '姚华', '李南'],
        'gender': [True, False, True, False, True, False, True],
        'age': [16, 20, 18, 18, 17, 18, 16],
        'height': [1.88, 1.78, 1.81, 1.86, 1.74, 1.75, 1.76]
        }
frame = pd.DataFrame(data, index=[6,5,4,3,2,1,0])

#        ID name  gender  age  height
# 6  000001   黎明    True   16    1.88
# 5  000002  赵怡春   False   20    1.78
# 4  000003  张富平    True   18    1.81
# 3  000004   白丽   False   18    1.86
# 2  000005  牛玉德    True   17    1.74
# 1  000006   姚华   False   18    1.75
# 0  000007   李南    True   16    1.76

2)DataFrame 基础属性和整体情况查询

1.基础属性(不是方法,因此没有括号

frame.shape #行数列数
frame.dtypes #列数据类型
frame.ndim #数据维度
frame.index #行索引
frame.columns #列索引
frame.values #对象值,二维ndarray数组

2.整体情况查询

frame.head(3) #显示头部几行,默认5行
frame.tail(3) #显示末尾几行,默认5行
frame.info() #相关信息概览:行数,列数,列索引,列非空值个数,列类型,列类型,内存占用
frame.describe() #快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值
frame.sort_values(by="列名", ascending=True/False) #按某一列降序或升序排序

3)DataFrame 索引

3.1)基本索引
  • 方括号写数字,表示取行
  • 方括号写字符串,表示取列

取完之后type(data[])显示为Series类型

1.列索引

print(frame['name'])
# 6     黎明
# 5    赵怡春
# 4    张富平
# 3     白丽
# 2    牛玉德
# 1     姚华
# 0     李南
# Name: name, dtype: object

print(frame[['name','age']])
#   name  age
# 6   黎明   16
# 5  赵怡春   20
# 4  张富平   18
# 3   白丽   18
# 2  牛玉德   17
# 1   姚华   18
# 0   李南   16

print(frame.name)
# 6     黎明
# 5    赵怡春
# 4    张富平
# 3     白丽
# 2    牛玉德
# 1     姚华
# 0     李南
# Name: name, dtype: object

2.行索引

print(frame[2:7])
#        ID name  gender  age  height
# 4  000003  张富平    True   18    1.81
# 3  000004   白丽   False   18    1.86
# 2  000005  牛玉德    True   17    1.74
# 1  000006   姚华   False   18    1.75
# 0  000007   李南    True   16    1.76

print(frame[2:7:2])
#        ID name  gender  age  height
# 4  000003  张富平    True   18    1.81
# 2  000005  牛玉德    True   17    1.74
# 0  000007   李南    True   16    1.76

3.同时进行 行列索引

print(frame['name'][0:1])
print(frame[0:1]['name'])
3.2)iloc & loc

1.iloc函数:使用位置索引数据

print(frame.iloc[1,3])			选择第2行,第4列数据
print(frame.iloc[1:2,0:3])		选择第12行,第03列数据
print(frame.iloc[[3,1],[0,2]])	选择42行,第12列共两个数据(4行和2行的位置会变化)

2.loc函数:使用标签获取数据,且包含下界(只有它包含)(如果index=101,102,则索引号不能为1,2,而应该为101,102

print(frame.loc[0:1]) 			选择01行,共两个数据
print(frame.loc[[1,3]]) 		选择24行,共两个数据

同时读取行列:
print(frame.loc[:,['name']])
print(frame.loc[:,['name','age']])

iloc 与 loc 的区别:

frame = pd.DataFrame(data, index=[100,101,102,103,104,105,106])
print(frame[0:1])
#         ID name  gender  age  height
# 100  000001   黎明    True   16    1.88

print(frame[100:101])
# Empty DataFrame

print(frame.loc[0:1])
# Columns: [ID, name, gender, age, height]
# Index: []
# Empty DataFrame

print(frame.loc[100:101])
# Columns: [ID, name, gender, age, height]
# Index: []
#          ID name  gender  age  height
# 100  000001   黎明    True   16    1.88
# 101  000002  赵怡春   False   20    1.78

3.3)布尔索引

不同条件需要用括号分隔

print(frame[frame['age'] > 17])
print(frame[(frame['age']> 17) & (frame['height'] > 1.80])
print(frame[(frame['age']> 17) & (frame['gender'] == True)])
print(frame[frame['age'].isin([20, 16])])
print(frame['name'[[2, 3]][(frame['height']> 1.80)])
print(framel(frame[height']> 1.80) & (frame['gender] == True)]['name']) 查询身高大于1.80的男生姓名

4)缺失数据的处理

1.处理 NaN 数据
判断数据是否为NaN: pd.isnull(frame)、pd.notnull(frame)

  • 删除NaN所在的行列:frame.dropna (axis=0, how='any / all', inplace=False)
    how:  any:只要有 NaN 就删除这一行/列
        all:全部为 NaN 才删除
    inplace:对数据是否进行原地修改

  • 填充数据:frame.fillna(0)、frame.fillna(frame.mean())、frame.fillna(frame.median())

2.处理为0的数据(赋值为 NaN frame[frame==0] = np.nan

当然,并不是每次为0的数据都需要处理。
在pandas 中计算平均值等数值时,NaN 是不参与计算的,但是0会(numpy 中 NaN 参与计算)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值