导入库 import pandas as pd
一、数据结构
1、Series
格式:pandas.Series(data,index,dtype) :date 一维数组;index = 指定标签,默认为从0开始的数字。
2、DataFrame
格式:pandas.DataFrame( data, index, columns, dtype, copy):data 二维数组;index 索引(行标签);colunms 列标签。
二、创建结构
1、空对象
series1 = pd.Series()
dataframe1 = pd.DataFrame()
2、数组对象
2.1、标量
series = pd.Series(5)
2.2、列表
series1 = pd.Series('小明', '小红', '小紫')
dataframe1 = pd.DataFrame(\['小明', '小红', '小紫', '小明', '小红', '小紫'])
2.3、字典
指定对象行标签为 name 和 gender(一维直接将键作为标签,二维将键作为列标签,需手动设置行标签(index),否则默认从0开始)。
series2 = pd.Series(data={"name":"小明","gender":"男"})
dataframe2 = pd.DataFrame({"name":"小明", '小红',"gender": "男",'女'},index='one', 'two')
2.4、列表内嵌套字典
根据index= 设置行标签;根据字典键设置列标签。
dataframe = pd.DataFrame({'name': "张三", 'age': 18},{'name': "小红", 'gender': "男", 'age': 19},index='name', 'gender')
2.5、Series 创建 DataFrame
若标签不一致,数据无法放到对应列
series1 = pd.Series("小黄", 5, "新诚信", 1, 11111)
series2 = pd.Series("小绿", 7, "新诚信", 2, 22222)
dataframe = pd.DataFrame(series1, series2, index='series1', 'series2')
series1 = pd.Series("小黄", 5, "新诚信", 1, 11111, index="name", "age", "address", "gender", "id")series2 = pd.Series("小绿", 7, "新诚信", 2, 22222, index="name", "age", "address", "gender", "id")
dataframe = pd.DataFrame(series1, series2, index='series1', 'series2', columns="name", "age", "address", "gender", "id")
三、索引操作
1、列索引
通过列标签进行操作(Series只有一个标签,等同于DataFrame的行标签,所以列索引操作只有DataFrame 对象)
1.1、截取数据
格式:对象名称列名称 (列名称只能填写一个)
dataframe = pd.DataFrame({"name": "小明", '小红', "gender": "男", '女'},index='one', 'two')
print(dataframe'name')
print(dataframe'gender')
1.2、添加(修改)列
格式:对象名称列名称=数据(一般使用列表直接添加,元素个数要与行一致);若数据是标量,等同于每行都接收同一个值。
若列名称已存在于列标签中,则修改其标签内容,列名称不存在,添加一列数据,列标签为该列名称 (与字典新增修改一致)
dataframe'age' = 15
dataframe'age' = 15, 18
1.3、删除列
格式:对象名称.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise'):labels 单个标签或由多个标签组成的列表;axis =1(axis = columns) 删除列;columns 与labels功能一致,指定删除的列标签;inplace默认为False,返回新的对象,若为True,直接在原对象进行删除。
dataframe.drop(labels='age', axis=1, inplace=True)
2、行索引
2.1、截取数据
2.1.1、loc
只能使用标签索引,不能使用为位置数索引;此方法的切片方式前后端闭合。
如果选择单行或单列,返回的数据类型为Series;选择多行或多列,返回的数据类型为DataFrame;选择单个元素(某行某列对应的值),返回的数据类型为该元素的原始数据类型(如整数、浮点数等)。
格式:对象名称.locindexer、对象名称.locrow_indexer, column_indexer、对象名称.locindexer1: indexer2
series = pd.Series(data={"name": "小明", "gender": "男"})
dataframe = pd.DataFrame({"name": "小明", '小红', '小绿', "gender": "男", '女', '女',
'age': 15, 17, 16}, index='one', 'two', 'three')
dataframe'age' = 15, 17, 16
print(series.loc'name') # 标签为 name 的数据
print(series.loc'name':'gender') # 标签为 name 到 gender 之间的数据(前后闭合)
print(dataframe.loc'one') # 行标签为 one 的数据
print(dataframe.loc'one':'three') # 行标签从 one 到three 的所有行
print(dataframe.loc\['one', 'two', 'name', 'gender']) # 行从 one 到 two ,列从name 到 gender ;所围矩形的所有数据
2.1.2、iloc
只能基于位置推算获取数据(对loc的补充,格式并无区别)。
series = pd.Series(data={"name": "小明", "gender": "男"})
dataframe = pd.DataFrame({"name": "小明", '小红', '小绿', "gender": "男", '女', '女',
'age': 15, 17, 16}, index='one', 'two', 'three')
dataframe0 = 15, 17, 16
print(series.iloc0) # 位置第一的数据
print(series.iloc0:1) # 位置从第一到第二的数据
print(dataframe.iloc0) # 第一行的数据
print(dataframe.iloc0:2) # 第一行到第三行的所有行数据
print(dataframe.iloc\[0, 1, 0, 1]) # 行从1到2,列从1到2;所围矩形的所有数据
2.1.3、切片选取
与iloc类似,series0只有一个元素会被提醒;dataframe失去列表嵌套截取数据功能。
series = pd.Series(data={"name": "小明", "gender": "男"})
dataframe = pd.DataFrame({"name": "小明", '小红', '小绿', "gender": "男", '女', '女',
'age': 15, 17, 16}, index='one', 'two', 'three')
dataframe0 = 15, 17, 16
print(series0) # 位置第一的数据
print(series0:1) # 位置从第一到第二的数据
print(dataframe0) # 第一行的数据
print(dataframe0:2) # 第一行到第三行的所有行数据
2.2、添加行
2.2.1、loc
与列添加一致,通过行标签添加修改
dataframe'age' = 15, 18
2.2.2、concat
需要保持添加新行的列数等于原对象的列数,还需要使添加的列的标签等于原对象的列标签(使用数组的resahpe的方法改变形状最佳)。
axis=0 添加行 (列相等)
axis =1 添加列 (行相等)
dataframe = pd.DataFrame({"name": "小明", '小红', '小绿', "gender": "男", '女', '女',
'age': 15, 17, 16}, index='one', 'two', 'three')
dateframe1 = pd.DataFrame(np.array('小黑', '男', 16).reshape(1, 3), index='four', columns='name', 'gender', 'age')
dataframe = pd.concat(dataframe, dateframe1, axis=0)
2.3、删除行数据
与列删除数据方法一致。
格式:对象名称.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise'):labels 单个标签或由多个标签组成的列表;axis =0(axis = index) 删除列;index 与labels功能一致,指定删除的行标签;inplace默认为False,返回新的对象,若为True,直接在原对象进行删除。
dataframe.drop(labels='one', axis=0, inplace=True)
四、对象常用函数
1、head() 和 tail()
head :默认首部五行
tail:默认尾部五行
series = pd.Series(data={"name": "小明", "gender": "男"})
dataframe = pd.DataFrame({"name": "小明", '小红', '小绿', "gender": "男", '女', '女',
'age': 15, 17, 16}, index='one', 'two', 'three')
dataframe.drop(labels='one', axis=0, inplace=True)
print(series.head()) # 默认首部五行,参数填写数值
print(dataframe.head())
print(series.tail()) # 默认尾部五行,参数填写数值
print(dataframe.tail())
2、isnull() 和 nonull()
isnull():如果为值不存在或者缺失,则返回 True
notnull():如果值不存在或者缺失,则返回 False
series = pd.Series(data={"name": "小明", "gender": "男"})
dataframe = pd.DataFrame({"name": "小明", '小红', '小绿', "gender": "男", '女', '女',
'age': 15, 17, 16}, index='one', 'two', 'three')
dataframe.drop(labels='one', axis=0, inplace=True)
print(series.isnull()) # 对应元素判断是否为空,为空返回True
print(dataframe.isnull())
print(series.notnull()) # 对应元素判断是否存在,为空返回True
print(dataframe.notnull())
五、常用函数
| 函数名称 | 描述说明 |
|---|---|
| count() | 统计某个非空值的数量 |
| sum() | 求和 |
| mean() | 求均值 |
| median() | 求中位数 |
| var() | 求样本方差 |
| std() | 求标准差 |
| min() | 求最小值 |
| max() | 求最大值 |
| abs() | 求绝对值 |
| prod() | 求所有数值的乘积 |
series = pd.Series(20, 30, 15, 20)
dataframe = pd.DataFrame(\[20, 30, 15, 20, 18, 52, 47, 33])
print(series.mean(), dataframe.mean()) # 每列的算术平均数
print(series.median(), dataframe.median()) # 每列的中位数
print(series.var(), dataframe.var()) # 每列总体方差
print(series.std(), dataframe.std()) # 每列标准差
print(series.min(), dataframe.min()) # 每列最小值
print(series.max(), dataframe.max()) # 每列最大值
print(series.sum(), dataframe.sum()) # 每列之和
print(series.count(), dataframe.count()) # 每列非零元素的个数
print(series.abs(), dataframe.abs()) # 所有元素的绝对值
print(series.prod(), dataframe.prod()) # 所有数值的乘积