当前位置: 首页 > article >正文

Pandas库学习Day20

Pandas库

1. 数据结构

数据结构维度说明
Series1该结构能够存储各种数据类型,比如字符数、整数、浮点数、Python 对象等,Series 用 name 和 index 属性来描述数据值。Series 是一维数据结构,因此其维数不可以改变
DataFrame2DataFrame 是一种二维表格型数据的结构,既有行索引,也有列索引。行索引是 index,列索引是 columns。 在创建该结构时,可以指定相应的索引值

1.1 Series

Pandas Series 类似表格中等一个列(column),类似于一维数组,可以保存任何数据类型 Series 由索引(index)和列组成,函数:

函数名参数
pandas.Series(data,index,dtype)data:一组数据(ndarray 类型)
index:数据索引标签,如果不指定,默认从 0 开始
dtype:数据类型,默认会自己判断
copy:表示对 data 进行拷贝,默认为 False

1.2 创建Series对象

import pandas as pd
import numpy as np
from pandas.core.interchange.dataframe_protocol import DataFrame


def pd_series():
    #创建一个空Series对象
    s = pd.Series()
    print(s)

    #创建一个Series对象,用python列表初始化
    s1 = pd.Series(['张三','李四','王五'])
    print(s1)
    print(s1[0])
    #创建Series对象,使用指定索引
    s2 = pd.Series([1,2,3],index=['a','b','c'])
    print(s2)
    print(s2['a'])
    print(s2[2])#也可以取,但是会报警告
    #根据ndarray创建Series对象
    arr = np.array([1,2,3,4])
    s3 = pd.Series(arr)
    print(s3)
    #根据字典创建Series对象
    dic = {'name':'zhangsan','age':18,'sexual':0}
    s4 = pd.Series(dic)
    print(s4)
    #通过标量创建对象,如果不指定index,则创建一行,如果指定index,则按照index数量进行创建行,每行都是标量值
    s5 = pd.Series(5,index=[0,1,2,3,4,5])
    print(s5)
pd_series()

1.3 Series常见属性

名称属性
axes以列表的形式返回所有行索引标签
dtype返回对象的数据类型
empty返回一个布尔值,用于判断数据对象是否为空
ndim返回输入数据的维数
size返回输入数据的元素数量
values以 ndarray 的形式返回 Series 对象
index返回一个RangeIndex对象,用来描述索引的取值范围
def pd_series_attr():
    s = pd.Series(['a','b','c','d','e'])
    #获取Series对象的索引信息
    print(s.axes)
    #获取数据类型
    print(s.dtype)
    #判断Series是否为空
    print(s.empty)
    #获取数组维度
    print(s.ndim)
    #获取Series对象中的元素个数
    print(s.size)
    #获取Series对象的值,返回一个ndarray的数组
    #获取索引信息
    print(s.values)
    print(s.index)

pd_series_attr()

1.4 Series常用方法

def pd_series_func():
    s = pd.Series(['a','b','c','d','e','f',None])
    print(s)
    #获取Series前n行数据,默认前5行
    print(s.head())
    print(s.head(3))
    # 获取Series后n行数据,默认后5行
    print(s.tail())
    print(s.tail(3))
    #判断Series对象是否为None,是为Ture,不是为False
    print(s.isnull())
    print(s.notnull())
    #利用布尔判断结果,筛选满足条件的对象
    print(s[s.notnull()])

pd_series_func()

1.5 DataFrame

函数名参数
pd.DataFrame( data, index, columns, dtype, copy)data:一组数据(ndarray、series, map, lists, dict 等类型)
index:索引值,或者可以称为行标签
coumns:列标签,默认为 RangeIndex (0, 1, 2, …, n)
dtype:数据类型
copy:默认为 False,表示复制数据 data

1.6 创建DataFrame对象

def pd_df():
    #创建DataFrame空对象
    df = pd.DataFrame()
    print(df)
    #通过一维数组创建DataFrame对象
    df1 = pd.DataFrame(['zhangsan','lisi','wangwu'])
    print(df1)
    #通过columns指定列名
    df2 = pd.DataFrame(['zhangsan','lisi','wangwu'],columns=['name'])
    print(df2)
    #通过二维数组创建DataFrame对象
    df3 = pd.DataFrame([['zhangsan',18],['lisi',20],['wangwu',88]],columns=['name','age'])
    print(df3)
    #通过数字嵌套字典(json)创建DataFrame对象
    arr = [{'name': 'zhangsan', 'age': 18}, {'name': 'lisi', 'age': 20, 'sexual': 'male'}]
    df4 = pd.DataFrame(data=arr)
    print(df4)#字典的 key 无法找到对应的 value,将使用 NaN 代替。NaN:not a number(数字类型,解释为不是数字的数字)
    #通过字典创建:字典中每个key对应的value是一维数组
    dic = {'name':['zhangsan','lisi','wangwu'],'age':[18,19,88]}
    df5 = pd.DataFrame(data=dic)
    print(df5)
    #通过字典和Series创建,字典中每个key对应一个Series对象
    dic1 = {'one':pd.Series([1,2,3]),'two':pd.Series([4,5,6,7])}
    df6 = pd.DataFrame(dic1)
    print(df6)

pd_df()

1.7 DataFrame常用属性和方法

DataFrame 的属性和方法,与 Series 基本相同

名称属性和方法描述
T行和列转置。
axes返回一个仅以行轴标签和列轴标签为成员的列表。
dtypes返回每列数据的数据类型。
emptyDataFrame中没有数据或者任意坐标轴的长度为0,则返回True。
ndim轴的数量,也指数组的维数。
shape返回一个元组,表示了 DataFrame 维度。
sizeDataFrame中的元素数量。
values使用 numpy 数组表示 DataFrame 中的元素值。
head()返回前 n 行数据。
tail()返回后 n 行数据。
def pd_df_attr():
    df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})
    print(df)
    print('-------')
    # DataFrame转置
    print(df.T)
    print('-----')
    # DataFrame的行、列索引信息
    print(df.axes)
    print('------')
    # DataFrame每列数据类型
    print(df.dtypes)
    print('-----')
    # 判断DataFrame是否为空,DataFrame中的元素为None或NaN也不为空
    df1 = pd.DataFrame()
    print(df1.empty)
    print('======')
    # DataFrame的维度
    print(df.ndim)
    print('++++++')
    # DataFrame的形状
    print(df.shape)
    print('-----')
    # DataFrame中所有元素的数量
    print(df.size)
    print('======')
    # 返回ndarray对象的数组
    print(df.values)
    print('+++++')
    # 返回DataFrame的前n行数据,默认n=5
    print(df.head(2))
    print('-----')
    # 返回DataFrame的后n行数据,默认n=5
    print(df.tail(2))
pd_df_attr()

2. 索引

2.1 列索引

def pd_df_col():
    df = pd.DataFrame({'name':['zhangsan','lisi','wangwu'],'age':[21,22,33]})
    name_list = list(df['name'])
    print(name_list)
    print(df['age'])

    #df添加新列,可以用列表、ndarray、series添加
    #列表和ndarray添加时,行数要和原df中数据行数保持一致,series可以不一致,缺少的会自动补充为NaN
    df['id'] = np.array([1, 2, 3])
    df['address'] = ['sichuan','yunnan','beijing']
    df['sexual'] = pd.Series(['male','femela'])
    print(df)
    #insert:在指定列插入一列数据
    #loc:指定列的索引值
    #column:要插入的列名
    #value:要插入的值
    df.insert(1,'password',pd.Series([111,22,3333]))
    print(df)
    #修改某一列的值
    df['password'] = pd.Series([99,555,2])
    print(df)

    #drop:删除列
    #labels:要删除的列(或者行)标签
    #axis:轴,=0时按行删除,=1时按列删除
    #inplace:是否在原DataFrame上删除,如果为True删除原DataFrame的数据,为False则返回新DataFrame,默认为False
    deleted_df = df.drop(labels='id',axis=1)
    print(deleted_df)
    print(df)

    deleted_df = df.drop(labels='id', axis=1,inplace=True)
    print(deleted_df,'-----')
    print(df)
pd_df_col()

2.2 行索引

def pd_df_row():
    data = {
        'A':[1,2,3,4],
        'B':[5,6,7,8],
        'C':[9,10,11,12]
    }
    df = pd.DataFrame(data,index=['a','b','c','d'])
    print(df)
    #通过索引标签获取DataFrame中的行或列,如果获取一行或一列则返回Series对象,如果获取多行或多列则返回新的DataFrame

    #通过行索引标签获取a行的数据,返回结果是Series对象
    print(df.loc['a'])
    #通过切片的方式获取a行到c行的数据,返回结果是DataFrame,切片范围是左闭右闭区间
    print(df.loc['a':'c'])
    #获取a行和B列对应的数据,返回结果是一个值
    print(df.loc['a','B'])
    #根据a行c行A列C列获取对应的数据,返回结果是DataFrame
    print(df.loc[['a','c'],['A','C']])
    # loc方法不能使用行所在位置的索引进行获取
    # print(df.loc[0])

    # iloc:根据行所在的位置进行获取,不能通过行或列的索引标签获取数据
    # print(df.iloc['a'])
    # 获取行索引位置为0的行数据
    print(df.iloc[0])
    # 通过切片获取索引位置为0-2的行数据(不包括2),切片取值范围左闭右开
    print(df.iloc[0:2])
    # 通过行索引位置和列索引位置,获取对应的数据,返回一个值
    print(df.iloc[0,2])
    # 通过多个行索引位置和多个列索引位置,获取对应值
    print(df.iloc[[0,2],[0,2]])

    # 直接通过切片获取多行数据,切片范围是左闭右开区间
    print(df[0:2])


pd_df_row()

3. 常用函数

函数名称描述说明
count()统计某个非空值的数量
sum()求和
mean()求均值
median()求中位数
std()求标准差
min()求最小值
max()求最大值
abs()求绝对值
prod()求所有数值的乘积
import pandas as pd
import numpy as np
def pd_df_cal():
    data = {'A':[1,2,3,4,None],
            'B':[10,20,30,40,50],
            'C':[100,200,300,400,500]
            }
    df = pd.DataFrame(data)
    # 求每列的算数平均数
    print(df.mean())
    # 求每列的中位数
    print(df.median())
    # 求每列的样本方差
    print(df.var())
    # 求每列的标准方程
    print(df.std())
    # 求每列的最小值
    print(df.min())
    # 求每列的最大值
    print(df.max())
    # 求每列的所有元素之和
    print(df.sum())
    # 求每列非零元素的数量
    print(df.count())


pd_df_cal()

http://www.kler.cn/a/370913.html

相关文章:

  • 【Unity】unity3D 调用LoadSceneAsync 场景切换后比较暗 部门材质丢失
  • 【Linux】进程间通信IPC
  • SpringBoot链接Kafka
  • Cosmos:英伟达发布世界基础模型,为机器人及自动驾驶开发加速!
  • SpringBoot集成Mongodb
  • 晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版
  • 操作系统--进程
  • 大文件秒传,分片上传,断点续传
  • LeetCode 热题 100之子串
  • QT实时显示日志内容
  • Rust实现Kafka - 前言
  • 特斯拉与 SK hynix 的潜在交易
  • 代码随想录 | Day35 | 动态规划 :最小花费爬楼梯不同路径不同路径II
  • 2-133 基于matlab的粒子群算法PSO优化BP神经网络
  • 云手机简述(概况,使用场景,自己部署云手机)
  • LabVIEW汽车状态监测系统
  • 【SSM详细教程】-14-SpringAop超详细讲解
  • 基于SSM+小程序的智慧旅游平台登录管理系统(旅游2)
  • XJ02、消费金融|消费金融业务模式中的主要主体
  • 刷爆leetcode Day12 DP
  • 基础数据结构——二叉树(深度优先遍历,前序遍历,中序遍历,后序遍历)
  • 【数据结构】顺序表和链表
  • IFC模型文本的含义
  • 【336】基于springboot的社区物资交易互助平台
  • linux查看文件命令
  • 创建型模式-----建造者模式