Bootstrap

Pandas 教程

六、Pandas 教程

什么是Pandas

Pandas(Python Data Analysis Library)是基于NumPy 的为了解决数据分析任务而创建的一种工具,Pandas 纳入 了大量库和一些标准的数据模型,提供了高效地操作大型结构化数据集所需的工具。

Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。

Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。

Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。

Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。

pandas的核心延续了numpy当中的属性和方法,numpy的属性方法在 pandas中都可以使用如(.shape、 .dtype、 .ndim)

pandas 使用结构化数据集,结构化数据集类似于MYSQL关系型数据库的结构(有行有列)

如:

姓名 语文成绩 数学成绩
张三 70 80
李四 100 90
王五 60 99

1. 安装 pandas

  • 在Windows 下安装pandas
# 安装 pandas
pip install -i https://mirrors.aliyun.com/pypi/simple/ pandas==1.0.1
  • 在Mac OS/Linux 下安装pandas
# 安装 pandas
sudo pip3 install -i https://mirrors.aliyun.com/pypi/simple/ pandas==1.0.1

2. pandas核心数据结构

数据结构是计算机存储、组织数据的方式。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

pandas核心数据结构有两种:

  1. Series(系列)

    类似于numpy中的一维数组。

  2. DataFrame (数据帧)

    类似于numpy中的二维数组。

3. Series

Series可以理解为一个一维的数组,index名称可以自己改动。类似于定长的有序字典,有Index 和 value。

Series对象的创建

创建函数pandas.Series():

pandas.Series(
  data=数据,   # 类数组, 可迭代对象, 字典或标量值
  index=索引,  # 类数组等,默认是range(n)
  dtype=类型,  # 类型: numpy.dtype
  name='名称'  # str
  copy=False  # 是否复制data的数据(默认False)
)

示例:

import numpy as np
import pandas as pd

# 创建一个空的Series
s = pd.Series(dtype='int32')
print(s)

# 从ndarray创建一个Series
data = np.array(['张三', '李四', '王五', '赵柳'])
s = pd.Series(data)
print(s)

s = pd.Series(data, index=['100', '101', '102', '103'])

# 从字典创建一个Series
data = {
   '100': '张三', '101': '李四', '102': '王五'}
s = pd.Series(data)
print(s)

# 从标量创建一个Series
s = pd.Series(999, index=[0, 1, 2, 5], dtype='f8')
print(s)

Series对象的数据访问

Series对象可以使用整数索引、索引标签 、切片访问数据

import pandas as pd

# 使用索引获取数据元素
s = pd.Series([1, 2, 3, 4, 5],
              index=['a', 'b', 'c', 'd', 'e'])
print(s[2])  # 使用整数索引访问数据
print(s['a'])  # 使用标签索引访问数据

# 使用标签索引获取数据
print(s[['a', 'c', 'd']])  # 使用标签列表获取数据
print(s[[3, 1, 4]])  # 使用整数索引列表获取数据

# 切片操作
print(s[:3])
print(s[-3:])

Series常用属性

属性 说明
series.values 返回ndarray
series.index 返回索引序列
series.dtype 返回数据类型
series.size 返回元素个数
series.ndim 返回维数
series.shape 返回维度(形状)

示例:

import pandas as pd

# 使用索引获取数据元素
s = pd.Series([2, 3, 5, 7],
              index=['a', 'b', 'c', 'd'])

print(s.values)  # [2 3 5 7] , numpy.ndarray 类型
print(s.index)   # Index(['a', 'b', 'c', 'd'],
                 #       dtype='object')
print(s.dtype)   # int64
print(s.size)    # 4
print(s.shape)   # (4,)
print(s.ndim)    # 1

4. pandas日期时间类型

pandas支持多种格式字符串数据转换为日期类型数据:

Pandas 提供的 日期时间转换函数pd.to_datetime()

import pandas as pd
pd.to_datetime(
    arg   # 日期字符串或者 日期字符串的元组或者列表
)

返回值:

如果 arg 是一个字符串,返回一个 日期时间戳
如果 arg 是日期字符串的元组或者列表,则返回含有日期时间戳的DatetimeIndex 数组对象

示例

import pandas as pd

# pandas识别的日期字符串格式
str_list = ['2011', '2012-02', '2013-03-05',
            '2014/04/08', '2015/05/01 01:01:01',
            '01 Jun 2016']


# 使用 pd.to_datetime() 转换日期数据类型的 DatetimeIndex([...])
dates_array = pd.to_datetime(str_list)

# 用 DatetimeIndex 生成一个含有一系列时间的 Series
dates = pd.Series(dates_array)
print(dates)

# 获取时间的某个日期 相关数据的数值
print(dates.dt.year)

series.dt 属性

Series.dt提供了大量日期字段可供访问:

属性 说明
Series.dt.year The year of the datetime.
Series.dt.month The month as January=1, December=12.
Series.dt.day The days of the datetime.
Series.dt.hour The hours of the datetime.
Series.dt.minute The minutes of the datetime.
Series.dt.second The seconds of the datetime.
Series.dt.microsecond The microseconds of the datetime.
Series.dt.week The week ordinal of the year.
Series.dt.weekofyear The week ordinal of the year.
Series.dt.dayofweek The day of the week with Monday=0, Sunday=6.
Series.dt.weekday The day of the week with Monday=0, Sunday=6.
Series.dt.dayofyear The ordinal day of the year.
Series.dt.quarter The quarter of the date.
Series.dt.is_month_start Indicates whether the date is the first day of the month.
Series.dt.is_month_end Indicates whether the date is the last day of the month.
Series.dt.is_quarter_start Indicator for whether the date is the first day of a quarter.
Series.dt.is_quarter_end Indicator for whether the date is the last day of a quarter.
Series.dt.is_year_start Indicate whether the date is the first day of a year.
Series.dt.is_year_end Indicate whether the date is the last day of the year.
Series.dt.is_leap_year Boolean indicator if the date belongs to a leap year.
Series.dt.days_in_month The number of days in the month.

pandas日期计算

pandas支持计算两日期间的偏移时间:

示例:

import pandas as pd

# pandas识别的日期字符串格式
str_list = ['2011', '2012-02', '2013-03-05',
            '2014/04/08', '2015/05/01 01:01:01',
            '01 Jun 2016']

# to_datetime() 转换日期数据类型的 DatetimeIndex([...])
date_array = pd.to_datetime(str_list)

# 创建一个时间戳
cur_date = pd.to_datetime('2010-1-1')

#  计算 dates_array 中所有时间与  cur_date 的时间差
delta_days = dates_array - cur_date
print(delta_days)

delta_s = pd.Series(delta_days)
print(delta_s.dt.days) # 获取时间差的 天数的 Series
print(delta_s.dt.seconds)  # 获取时间差的 秒数的 Series

生成一组时间序列

通过指定周期和频率,使用date_range()函数就可以创建日期序列。 默认情况下,频率是’D’(即以Day为单位)。

函数

pandas.date_range(
  start=开始时间,  # str or datetime-like, optional
  end=截止时间,    # str or datetime-like, optional
  periods=周期,   # int, optional
  freq='间隔'     #  str or DateOffset, default 'D'
)

返回值 : 固定频率的 DatetimeIndex.

示例:

import pandas as pd

# 以日为频率
datelist = pd.date_range('2021/01/1', periods=5)
print(datelist)

# 以月为频率
;