Pandas 之 DataFrame 学习总结

pandas 是基于 NumPy 开发的,他的主要数据结构包括 Series 和 DataFrame,另外还有 Time-Series、Panel、Panel4D 和 PanelND,我现在的学习中不常用到,暂不详细介绍。

数据结构简介
Series一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。
Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。
Time-Series以时间为索引的Series。
DataFrame二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。
Panel三维的数组,可以理解为DataFrame的容器。
Panel4D是像Panel一样的4维数据容器。
PanelND拥有factory集合,可以创建像Panel4D一样N维命名容器的模块。

一、import

import numpy as np
import pandas as pd

二、创建DataFrame对象

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
c = ['a', 'b', 'c']
r = ['A', 'B', 'C']
df = pd.DataFrame(data=data, columns=c, index=r)

三、排序

  1. 按行名或列名排序
# 行名排序 降序
df.sort_index(axis=0, ascending=False)
# 列名排序 降序
df.sort_index(axis=0, ascending=False)
  1. 按值排序
df["a"].sort_values(ascending = False)
df.sort_values(['a', 'b', 'c'])

四、索引

  1. 位置索引
df.iloc[2] 			# 选择第二行所有数据, 是Series类型
df.iloc[[2]] 		# 选择第二行所有数据, 是DataFrame类型
df.iloc[:, 2] 		# 选择第二列所有数据, 是Series类型
df.iloc[:, [2]] 	# 选择第二列所有数据, 是DataFrame类型
df.iloc[:, 0:2] 	# 选择0到2列所有数据
df.iloc[[2,3], 0:2] # 选择2和3行, 0到2列所有数据
df.iat[1, 1] 		# 根据位置快速取出数据, 获取单个数据推荐这种方法
  1. 自定义索引
df.loc['top'] 		# 选择指定行数据, 是Series类型
df.loc[['top']] 	# 选择指定行数据, 是DataFrame类型
df.loc[:, 'xm'] 	# 选择指定列数据, 是Series类型(不推荐)
df.loc[:, ['xm']] 	# 选择指定列数据, 是DataFrame类型(不推荐)
df.loc[:, ['bj','xm']] 	# 选择多列数据(不推荐)
df.loc[:, 'bj':'xb'] 	# 选择多列之间所有数据, 列切片只能用这种方法
df.loc[['top','count'], 'bj':'xb'] # 选择指定行, 指定列数据
df.at['top', 'xm'] 	# 根据自定义索引快速取出数据, 获取单个数据推荐这种方法
  1. 布尔索引
# 选取所有出生日期大于等于1998年的数据, 这里是字符串比较
df[df['csrq']>='1998'] 
# 选取所有出生日期大于等于1997年小于1999年的数据
df[(df['csrq']>='1997')&(data['csrq']<'1999')]
# 选取所有出生日期大于等于1997年小于1999年的数据
df[df['csrq'].between('1997', '1999')]
# 选取所有出生日期大于等于1997年或者姓名为张三的数据
df[(df['csrq']>='1997')|(data['xm']=='张三')]
# 另一种选取方式(不推荐, 实测效率比上面低)
df[df.csrq>='1998'] 
# 选择字段值为指定内容的数据
df[df['xm'].isin(['张三','李四'])] 

五、插入与删除

# 假设cj列本来不存在, 这样会在列尾添加新的一列cj, 值为s(Series对象), 原地
df['cj'] = s 
# 在第1列位置插入一列dz(地址), 值为s, 原地
df.insert(0, 'dz', s)
# 在df中添加内容为df2(必须是DataFrame对象)的新列(添加列), 非原地 
df.join(df2)
 # 将df2中的行添加到df的尾部(添加行), 非原地
df.append(df2)
# 删除单列, 并返回删除的列, 原地
df.pop('xm')
# 删除指定行, 非原地 
df.drop(1) 
# 删除指定列, axis=1指第2维, axis默认0, 非原地
df.drop(['xm', 'xh'], axis=1) 

六、DataFrame 常用属性与方法

'''常用属性'''
df.values # 查看所有元素的value
df.dtypes # 查看所有元素的类型
df.index # 查看所有行名
df.index = ['总数', '不同', '最多', '频率'] # 重命名行名
df.columns # 查看所有列名
df.columns = ['班级', '姓名', '性别', '出生日期'] # 重命名列名
df.T # 转置后的df, 非原地

'''查看数据'''
df.head(n) # 查看df前n条数据, 默认5条
df.tail(n) # 查看df后n条数据, 默认5条
df.shape() # 查看行数和列数
df.info() # 查看索引, 数据类型和内存信息

'''数据统计'''
df.describe() # 查看数据值列的汇总统计, 是DataFrame类型
df.count() # 返回每一列中的非空值的个数
df.sum() # 返回每一列的和, 无法计算返回空, 下同
df.sum(numeric_only=True) # numeric_only=True代表只计算数字型元素, 下同
df.max() # 返回每一列的最大值
df.min() # 返回每一列的最小值
df.argmax() # 返回最大值所在的自动索引位置
df.argmin() # 返回最小值所在的自动索引位置
df.idxmax() # 返回最大值所在的自定义索引位置
df.idxmin() # 返回最小值所在的自定义索引位置
df.mean() # 返回每一列的均值
df.median() # 返回每一列的中位数
df.var() # 返回每一列的方差
df.std() # 返回每一列的标准差
df.isnull() # 检查df中空值, NaN为True, 否则False, 返回一个布尔数组
df.notnull() # 检查df中空值, 非NaN为True, 否则False, 返回一个布尔数组

'''转换成 Numpy'''
df.values
np.array(df)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万俟淋曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值