python pandas 1

导入库 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()) # 所有数值的乘积

相关推荐
混迹网络的权某8 分钟前
每天一道C语言精选编程题之求数字的每⼀位之和
c语言·开发语言·考研·算法·改行学it·1024程序员节
IronmanJay3 小时前
【LeetCode每日一题】——862.和至少为 K 的最短子数组
数据结构·算法·leetcode·前缀和·双端队列·1024程序员节·和至少为 k 的最短子数组
加载中loading...4 小时前
Linux线程安全(二)条件变量实现线程同步
linux·运维·服务器·c语言·1024程序员节
Wx120不知道取啥名4 小时前
C语言之长整型有符号数与短整型有符号数转换
c语言·开发语言·单片机·mcu·算法·1024程序员节
biomooc5 小时前
R语言 | paletteer包:拥有2100多个调色板!
r语言·数据可视化·1024程序员节
Hello.Reader5 小时前
FFmpeg 深度教程音视频处理的终极工具
ffmpeg·1024程序员节
Y.O.U..6 小时前
STL学习-容器适配器
开发语言·c++·学习·stl·1024程序员节
就爱敲代码6 小时前
怎么理解ES6 Proxy
1024程序员节
憧憬一下6 小时前
input子系统的框架和重要数据结构详解
arm开发·嵌入式·c/c++·1024程序员节·linux驱动开发
三日看尽长安花6 小时前
【Tableau】
1024程序员节