导入库 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;选择单个元素(某行某列对应的值),返回的数据类型为该元素的原始数据类型(如整数、浮点数等)。
格式:对象名称.loc[indexer]、对象名称.loc[row_indexer, column_indexer]、对象名称.loc[indexer1: 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'])
dataframe[0] = [15, 17, 16]
print(series.iloc[0]) # 位置第一的数据
print(series.iloc[0:1]) # 位置从第一到第二的数据
print(dataframe.iloc[0]) # 第一行的数据
print(dataframe.iloc[0:2]) # 第一行到第三行的所有行数据
print(dataframe.iloc[[0, 1], [0, 1]]) # 行从1到2,列从1到2;所围矩形的所有数据
2.1.3、切片选取
与iloc类似,series[0]只有一个元素会被提醒;dataframe失去列表嵌套截取数据功能。
series = pd.Series(data={"name": "小明", "gender": "男"})
dataframe = pd.DataFrame({"name": ["小明", '小红', '小绿'], "gender": ["男", '女', '女'],
'age': [15, 17, 16]}, index=['one', 'two', 'three'])
dataframe[0] = [15, 17, 16]
print(series[0]) # 位置第一的数据
print(series[0:1]) # 位置从第一到第二的数据
print(dataframe[0]) # 第一行的数据
print(dataframe[0: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()) # 所有数值的乘积