pandas库

1、概述

  • Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来
  • Pandas 名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)
  • Pandas 已经成为 Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具
  • Pandas 是 Python 语言的一个扩展程序库,用于数据分析
  • Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具
  • Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)
  • Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据
  • Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征
  • Pandas 广泛应用在学术、金融、统计学等各个数据分析领域
  • Pandas 的出现使得 Python 做数据分析的能力得到了大幅度提升,它主要实现了数据分析的五个重要环节:加载数据、整理数据、操作数据、构建数据模型、分析数据

2、安装

pip install pandas==1.1.5 -i https://pypi.tuna.tsinghua.edu.cn/simple/

3、方法示例

python 复制代码
# pandas为必要包
# numpy和matplotlib作为支撑,在pandas中经常能用到
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
python 复制代码
def pd_series():
    # 创建空的Series对象
    series01 = pd.Series()
    print(series01)
    print()
    
    # 创建Series对象,使用列表进行初始化
    series02 = pd.Series(['张三','李四', '王五', '赵六'])
    print(series02)
    print()
    
    # 创建Series对象,并指定索引
    series03 = pd.Series([1,2,3,4], index=['a', 'b', 'c', 'd'])
    print(series03)
    print()
    
    #使用nadarray创建Series对象
    arr = np.array([1,2,3,4])
    series04 = pd.Series(arr)
    print(series04)
    print()
    
    # 使用字典创建Series对象
    dic = {'name': '张三', 'age': 18, 'sex': '男'}
    series05 = pd.Series(dic)
    print(series05)
    print()
    
    # 使用标量创建Series对象
    # series06 = pd.Series(5)
    # 指定行索引(index),按照行索引的数量进行创建,每行的值都是标量的值
    series06 = pd.Series(5, index=['a', 'b', 'c'])
    print(series06)
    
if __name__ == '__main__':
    pd_series()
Series([], dtype: object)

0    张三
1    李四
2    王五
3    赵六
dtype: object

a    1
b    2
c    3
d    4
dtype: int64

0    1
1    2
2    3
3    4
dtype: int32

name    张三
age     18
sex      男
dtype: object

a    5
b    5
c    5
dtype: int64
python 复制代码
def pd_series_atr():
    s0 = pd.Series(['a','b','c','d','e'])
    print(s0.axes)  # 获取series对象的索引信息
    print(s0.dtype) # 获取series对象的数据类型
    print(s0.empty) # 判断series对象是否为空
    print(s0.ndim)  # 获取series对象的维度
    print(s0.size)  # 获取series对象的元素个数
    print(s0.values)# 获取series对象的值,返回ndarray类型数组
    print(s0.index) # 获取series对象的索引信息
    
if __name__ == '__main__':
    pd_series_atr()
[RangeIndex(start=0, stop=5, step=1)]
object
False
1
5
['a' 'b' 'c' 'd' 'e']
RangeIndex(start=0, stop=5, step=1)
python 复制代码
def pd_series_method():
    s0 = pd.Series(['a','b','c','d','e',None])
    print(s0)
    print()
    
    print('前5个元素为:')
    print(s0.head())  # 获取前5个元素,默认前5个元素,可设置参数,指定元素个数
    print()
    
    print('后5个元素为:')
    print(s0.tail())  # 获取后5个元素,默认后5个元素,可设置参数,指定元素个数
    print()
    
    print('该对象元素为:')
    print(s0.isnull()) # 判断series对象中每个值是否为空
    print()
    
    print('该对象元素为:')
    print(s0.notnull()) # 判断series对象中每个值是否不为空
    print()
    
    print(s0.describe()) # 获取series对象的描述信息
    print()
    
    print(s0.sort_values()) # 对series对象进行排序
    print()
    
    print(s0.value_counts()) # 统计series对象中每个值出现的次数
    print()
if __name__ == '__main__':
    pd_series_method()
0       a
1       b
2       c
3       d
4       e
5    None
dtype: object

前5个元素为:
0    a
1    b
2    c
3    d
4    e
dtype: object

后5个元素为:
1       b
2       c
3       d
4       e
5    None
dtype: object

该对象元素为:
0    False
1    False
2    False
3    False
4    False
5     True
dtype: bool

该对象元素为:
0     True
1     True
2     True
3     True
4     True
5    False
dtype: bool

count     5
unique    5
top       a
freq      1
dtype: object

0       a
1       b
2       c
3       d
4       e
5    None
dtype: object

a    1
b    1
c    1
d    1
e    1
Name: count, dtype: int64
python 复制代码
def pd_dataframe():
    # 创建空的DataFrame对象
    df01 = pd.DataFrame()
    print(df01)
    print()
    
    # 创建DataFrame对象,使用列表进行初始化
    df02 = pd.DataFrame(['张三', '李四', '王五', '赵六'])
    print(df02)
    print()
    
    # 创建DataFrame对象,并指定索引
    df03 = pd.DataFrame(['张三', '李四', '王五', '赵六'],columns=['name'])
    print(df03)
    print()
    
    # 使用二维数组创建DataFrame对象
    df04 = pd.DataFrame([['张三',21,'男'],['李四',20,'女'],['王五',19,'男']],columns=['name','age','sex'])
    print(df04)
    print()
    
    # 使用字典创建DataFrame对象
    df05 = pd.DataFrame({'name':['张三', '李四', '王五'],'age':[21, 20, 19],'sex':['男','女','男']})
    print(df05)
    print()
    
    # 使用Series对象创建DataFrame对象
    df06 = pd.DataFrame(
        {'name':pd.Series(['张三', '李四', '王五']),
         'age':pd.Series([21, 20, 19]),
         'sex':pd.Series(['男','女','男'])
         })
    print(df06)
    print()

if __name__ == '__main__':
    pd_dataframe()
Empty DataFrame
Columns: []
Index: []

    0
0  张三
1  李四
2  王五
3  赵六

  name
0   张三
1   李四
2   王五
3   赵六

  name  age sex
0   张三   21   男
1   李四   20   女
2   王五   19   男

  name  age sex
0   张三   21   男
1   李四   20   女
2   王五   19   男

  name  age sex
0   张三   21   男
1   李四   20   女
2   王五   19   男
python 复制代码
import pandas as pd
def pd_col():
    df = pd.DataFrame({'name':['张三', '李四', '王五'],'age':[21, 20, 19],'sex':['男','女','男']})
    namelist = list(df['name'])
    print(namelist)
    print(df['age'])
    
    # df添加新列,可使用列表、nparray、Series添加
    # 列表和nparray添加时,列表长度必须与df的行数相同
    # Series添加时,Series的行数可以不一致,缺省的会自动补齐
    df['address'] = ['北京', '上海', '广州']
    df['sex'] = pd.Series(['male', 'female', 'male'])
    print(df)
    
    # insert()方法在指定位置添加新列
    # loc:指定列的索引值
    # column:指定添加列的名称
    # value:指定添加列的元素值
    df.insert(0,'id',pd.Series([0,1,2]))
    print(df)
    print()
    
    # 修改列
    # df.columns = ['ID', 'name', 'age', 'sex']
    # print(df)
    
    # 删除列
    # labels:指定删除的列名称
    # axis:指定删除的轴,0为行,1为列
    # inplace:是否在原数据上修改
    df.drop(labels='id', axis=1,inplace=True)
    print(f"df:{df}")
    
if __name__ == '__main__':
    pd_col()
['张三', '李四', '王五']
0    21
1    20
2    19
Name: age, dtype: int64
  name  age     sex address
0   张三   21    male      北京
1   李四   20  female      上海
2   王五   19    male      广州
   id name  age     sex address
0   0   张三   21    male      北京
1   1   李四   20  female      上海
2   2   王五   19    male      广州

df:  name  age     sex address
0   张三   21    male      北京
1   李四   20  female      上海
2   王五   19    male      广州
python 复制代码
def pd_loc():
    data = {
        "name":['张三', '李四', '王五', '赵六'],
        "age":[21, 20, 19, 23],
        "sex":['男','女','男','男'],
        "address":['北京', '上海', '广州', '深圳']
    }
    print(data)
    print()
    
    # loc方法,根据索引获取DataFrame行或列,若获取一行或一列则返回Series对象,若获取多行或多列则返回DataFrame对象
    df = pd.DataFrame(data,index=['a', 'b', 'c' , 'd'])
    
    # 根据行索引标签获取a行的数据,返回结果是DataFrame对象,区间为闭区间
    print(df.loc['a'])
    print()
    
    # 通过切片方式获取a行到c行,返回结果是DataFrame对象
    print(df.loc['a':'c'])
    print()
    
    # 获取a行和B列对应数据,返回结果是一个数值
    print(df.loc['a',"name"])
    print()
    
    # 获取a行、c行和A列、C列数据,返回结果是DataFrame对象
    print(df.loc[['a', 'c'], ['name','age']])
    print() 
    
if __name__ == '__main__':
    pd_loc()
{'name': ['张三', '李四', '王五', '赵六'], 'age': [21, 20, 19, 23], 'sex': ['男', '女', '男', '男'], 'address': ['北京', '上海', '广州', '深圳']}

name       张三
age        21
sex         男
address    北京
Name: a, dtype: object

  name  age sex address
a   张三   21   男      北京
b   李四   20   女      上海
c   王五   19   男      广州

张三

  name  age
a   张三   21
c   王五   19
python 复制代码
python 复制代码
def pd_iloc():
    data = {
        "name":['张三', '李四', '王五', '赵六'],
        "age":[21, 20, 19, 23],
        "sex":['男','女','男','男'],
        "address":['北京', '上海', '广州', '深圳']
    }
    
    df = pd.DataFrame(data,index=['a', 'b', 'c' , 'd'])
    
    # iloc方法,根据行索引所在位置进行获取,不能通过行索引或列索引标签获取数据
    # 获取行索引位置为0的行数据,返回结果是DataFrame对象
    print(df.iloc[0])
    print()
    
    # 通过切片方式获取行索引位置为0到2的行数据,返回结果是DataFrame对象,区间为左闭右开
    print(df.iloc[0:2])
    print()
    
    #获取行索引和列索引位置的数据,返回结果为一个数值
    print(df.iloc[0,1])
    print()
    
    #通过多个行索引位置和多个列索引位置获取数据,返回结果是DataFrame对象
    print(df.iloc[[0, 2], [0, 2]])
    print()
    
    # 直接获取第0行到第1行的数据,区间左闭右开
    print(df[0:2])
    
if __name__ == '__main__':
    pd_iloc()
name       张三
age        21
sex         男
address    北京
Name: a, dtype: object

  name  age sex address
a   张三   21   男      北京
b   李四   20   女      上海

21

  name sex
a   张三   男
c   王五   男

  name  age sex address
a   张三   21   男      北京
b   李四   20   女      上海
python 复制代码
def pd_append():
    data = {"A":[1,2,3],"B":[4,5,6],"C":[7,8,9]}
    df = pd.DataFrame(data,index=['a', 'b', 'c'])
    
    s = pd.Series([10,20,30],name = 'd')
    # 使用concat方法将Series添加到DataFrame
    df1 = pd.concat([df, s.to_frame().T], axis=0)
    print(df1)
    print()
    
    # drop:删除行,axis = 0,即按行删除
    #根据行标签删除数据
    df2 = df1.drop(['d'],axis=0)
    print(df2)
if __name__ == '__main__':
    pd_append()
     A    B    C     0     1     2
a  1.0  4.0  7.0   NaN   NaN   NaN
b  2.0  5.0  8.0   NaN   NaN   NaN
c  3.0  6.0  9.0   NaN   NaN   NaN
d  NaN  NaN  NaN  10.0  20.0  30.0

     A    B    C   0   1   2
a  1.0  4.0  7.0 NaN NaN NaN
b  2.0  5.0  8.0 NaN NaN NaN
c  3.0  6.0  9.0 NaN NaN NaN
相关推荐
四维碎片1 分钟前
【Qt】QApplication::restoreOverrideCursor():恢复鼠标光标到原始状态的用法解析
开发语言·qt·计算机外设
远望清一色15 分钟前
基于小波变换图像去噪MATLAB实现
开发语言·matlab
魔法自动机31 分钟前
Unity3D学习FPS游戏(3)玩家第一人称视角转动和移动
unity·1024程序员节·fps
啊QQQQQ33 分钟前
linux:回车换行+进度条+git理解与使用以及如何解决免密码push问题
开发语言·javascript·ecmascript
Ylucius40 分钟前
14天速成前端 ------学习日志(已完结)------ 后端程序员学习了解前端
java·开发语言·前端·vue.js·学习·状态模式·1024程序员节
恬淡虚无真气从之43 分钟前
django中entity.save(using=)的使用
数据库·python·django
就叫飞六吧1 小时前
关于Java中**optional,stream,lambda**
java·开发语言
lovelin+v175030409661 小时前
电商平台店铺运营:巧用 API 接口的策略之道
java·大数据·后端·python
AI原吾1 小时前
构建灵活、高效的HTTP/1.1应用:探索h11库
网络·python·网络协议·http·ai·h11
傻啦嘿哟1 小时前
Python中的HTTP高手:如何玩转requests模块
开发语言·python·http