Pandas的数据结构

Pandas 提供了丰富的功能,包括:

  • 数据清洗:处理缺失数据、重复数据等。
  • 数据转换:改变数据的形状、结构或格式。
  • 数据分析:进行统计分析、聚合、分组等。
  • 数据可视化:通过整合 Matplotlib 和 Seaborn 等库,可以进行数据可视化

Pandas 应用

Pandas 在数据科学和数据分析领域中具有广泛的应用,其主要优势在于能够处理和分析结构化数据。
以下是 Pandas 的一些主要应用领域:

  • 数据清洗和预处理: Pandas被广泛用于清理和预处理数据,包括处理缺失值、异常值、重复值等。它提供了各种方法来使数据更适合进行进一步的分析。
  • 数据分析和统计: Pandas使数据分析变得更加简单,通过DataFrame和Series的灵活操作,用户可以轻松地进行统计分析、汇总、聚合等操作。从均值、中位数到标准差和相关性分析,Pandas都提供了丰富的功能。
  • 数据可视化: 将Pandas与Matplotlib、Seaborn等数据可视化库结合使用,可以创建各种图表和图形,从而更直观地理解数据分布和趋势。这对于数据科学家、分析师和决策者来说都是关键的。
  • 时间序列分析: Pandas在处理时间序列数据方面表现出色,支持对日期和时间进行高效操作。这对于金融领域、生产领域以及其他需要处理时间序列的行业尤为重要。
  • 机器学习和数据建模: 在机器学习中,数据预处理是非常关键的一步,而Pandas提供了强大的功能来处理和准备数据。它可以帮助用户将数据整理成适用于机器学习算法的格式。
  • 数据库操作: Pandas可以轻松地与数据库进行交互,从数据库中导入数据到DataFrame中,进行分析和处理,然后将结果导回数据库。这在数据库管理和分析中非常有用。
  • 实时数据分析: 对于需要实时监控和分析数据的应用,Pandas的高效性能使其成为一个强大的工具。结合其他实时数据处理工具,可以构建实时分析系统。

pandas的使用

导入三剑客
numpy、pandas、matplotlib是数据分析三剑客,基本以下为定式。也就是每次都用

  • numpy 提供了数据分析的运算基础
  • pandas 提供了数据分析的业务处理的函数和类型
  • matplotlib 提供了数据分析可视化的函数
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xxxxx

一、Series

Series 是一种类似于一维数组的对象,由下面两个部分组成:

  • values:一组数据(ndarray类型)
  • index:相关数据的索引标签

索引: 每个 Series 都有一个索引,它可以是整数、字符串、日期等类型。如果没有显式指定索引,Pandas 会自动创建一个默认的整数索引。
数据类型: Series 可以容纳不同数据类型的元素,包括整数、浮点数、字符串等。
pandas.Series( data, index, dtype, name, copy)

参数说明:

  • data:一组数据(ndarray 类型)。
  • index:数据索引标签,如果不指定,默认从 0 开始。
  • dtype:数据类型,默认会自己判断。
    -name:设置名称。
  • copy:拷贝数据,默认为 False。

32B49FA4-ED68-446A-9EBF-C52FCB6D0CD6.jpg

1.1 Series的创建

什么是Series?
特点:

  • 有序
  • 类似一维数组
    故:
索引(隐式索引) index vlaues
0 tom 19
1 mary 20
2 jacl 16
  1. 能键值对访问
  2. 能索引访问

两种创建方式:

1.1.1 由列表或numpy进行创建

data1=[19,20,16]
s1= Series(data=data1)
s1

以上由于没有指定index,则以隐式索引来填充index

index=['tom','jack','mary']
age=[18,20,26]
s1=Series(index=index,data=age)
print(s1)
index=['tom','jack','mary']
age=[18,20,26]
s1=Series(index=index,data=age,name='年龄',dtype=np.float64)
print(s1)

1.1.2 由字典进行创建

dic={
    "tom":19,
    "jack":20,
    "mary":76
}
s2=Series(dic)
print(s2)
# 如果指定index,index优先字典的键值
dic={
    "tom":19,
    "jack":20,
    "mary":76
}
s2=Series(dic,index=['jack','bb'])
print(s2)

练习1:

使用多种方式创建Series,命名s1:
语文 134
数学 124
英语 99

index=['语文','数学','英语']
data1=[134,124,99]
s1=Series(index=index,data=data1,name='s1')
s1
dic={
    '语文':134,
    '数学':124,
    '英语':99
}
s1=Series(dic)
s1

1.2 Serise的索引和切片

可以通过中括号取单个索引,返回元素类型
也可以中括号里一个列表取多个索引,返回一个Serise类型
在 pandas 中,Series 对象有两种类型的索引:隐式索引(implicit index)和显式索引(explicit index)。
据需求自行指定的索引。显式索引提供了更多的灵活性和表达能力,使得在处理数据时更加方便。

  • 隐式索引:
    隐式索引是由系统自动分配给 Series 的默认整数索引,从0开始递增。
    隐式索引通常是与 Series 的位置相关的,即数据在序列中的位置决定了其隐式索引的值。
    当没有显式指定索引时,Series 默认使用隐式索引。
data = [10, 20, 30]
series = pd.Series(data)
# 隐式索引为 0, 1, 2
print(series)
# 输出:
# 0    10
# 1    20
# 2    30

  • 显式索引:
    显式索引是用户明确指定给 Series 的索引。
    显式索引可以是字符串、整数、日期等类型,不受顺序或唯一性的限制。
    使用显式索引可以更好地标识和访问数据。

data = [10, 20, 30]
index = ['a', 'b', 'c']
series = pd.Series(data, index=index)

# 显式索引为 'a', 'b', 'c'
print(series)
# 输出:
# a    10
# b    20
# c    30

1.2.1 显式索引

  • 使用字典作为索引
  • 使用.loc[] (推荐)
dic={
    '语文':134,
    '数学':124,
    '英语':99
}
s1=Series(dic)

#字典访问
display(s1['语文'],s1[['语文','数学']])

推荐使用Serise提供的.loc进行访问

index=['tom','jack','mary']
age=[18,20,26]
s1=Series(index=index,data=age,name='年龄',dtype=np.float64)
print(s1)

print(s1.loc['jack'])
print(s1.loc[['jack','mary']])

练习1:
找出大于100分的科目

使用values 获取Serise的np.arry


index=['语文','数学','英语','大数据']
age=[10,86,120,110]
s1=Series(index=index,data=age,name='成绩',dtype=np.int64)
print(s1)
s1.values>100
s1[s1.values>100]
s1.loc[s1.values>100].index

练习2:
找出大于班级平均分的学生

s2=Series(np.random.randint(0,100,size=20))
s2

我们简单把index当学号,后面的values当成绩

s2.values>s2.values.mean()
s2.loc[s2.values>s2.values.mean()]
s2.loc[s2.values>s2.values.mean()].index

1.2.2 隐式索引

  • 使用数字作为索引
  • 使用.iloc[] (推荐)
index=['语文','数学','英语','大数据']
age=[10,86,120,110]
s1=Series(index=index,data=age,name='成绩',dtype=np.int64)

print(s1.iloc[2])

1.2.3切片

s1.iloc[0:2]

Series 的操作方式

基本操作:

# 获取值
value = series.iloc[2]  # 获取索引为2的值

# 获取多个值
subset = series.iloc[1:4]  # 获取索引为1到3的值

# 使用自定义索引
value = series_with_index.loc['b']  # 获取索引为'b'的值


基本运算:

# 算术运算
result = series * 2  # 所有元素乘以2

# 过滤
filtered_series = series[series > 2]  # 选择大于2的元素

# 数学函数
import numpy as np
result = np.sqrt(series)  # 对每个元素取平方根

属性和方法:

# 获取索引
index = series_with_index.index

# 获取值数组
values = series_with_index.values

# 获取描述统计信息
stats = series_with_index.describe()

# 获取最大值和最小值的索引
max_index = series_with_index.idxmax()
min_index = series_with_index.idxmin()