Pandas教程,比较全面细致

1、定义

Pandas是基于Python的数据分析和数据处理库
具体来说,Pandas 是基于 NumPy 的,用于处理结构化数据,比如表格和时间序列数据,特别适合大规模的数据处理和清洗任务。

2、数据结构Pandas 主要引入了两种新的数据结构:DataFrame 和 Series。

DataFrame:类似于 Excel 或数据库中的表格,它是一个二维的、带有行和列标签的数据结构。每列可以包含不同类型的数据。

Series:是一维的数组,带有标签(类似于 Python 的字典),可以包含任何类型的数据。

2.1DataFrame的主要特性

二维数据结构

DataFrame 是一个类似于表格的二维数据结构,行和列分别代表不同的数据维度。每个 DataFrame 都由一个索引(index,行标签)和列(columns)构成。
行标签(index)可以是默认的整数索引,也可以是指定的字符串、日期等自定义索引。
每列的数据类型可以不同(例如,一列是整数,另一列是浮点数,另一列是字符串)。

多种创建方式

通过 Python 字典、列表、NumPy 数组、Excel 文件、SQL 数据库等多种方式创建 DataFrame。比如从字典创建:

import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Salary': [50000, 60000, 70000]}
df = pd.DataFrame(data)
print(df)
      Name  Age  Salary
0    Alice   25   50000
1      Bob   30   60000
2  Charlie   35   70000

通过二维数组创建

data = [
    ['Alice', 25, 50000],
    ['Bob', 30, 60000],
    ['Charlie', 35, 70000]
]

df = pd.DataFrame(data, columns=['Name', 'Age', 'Salary'])
print(df)
      Name  Age  Salary
0    Alice   25   50000
1      Bob   30   60000
2  Charlie   35   70000
pandas基本操作
# 查看前几行数据
df.head(2) #查看前两行
NameAgeSalary
0Alice2550000
1Bob3060000
# 选择列
df['Age'] #选择Age列
0    25
1    30
2    35
Name: Age, dtype: int64
# 选择多列
df[['Age','Salary']]
AgeSalary
02550000
13060000
23570000
# 选择行: 使用 iloc 根据行号选择,或使用 loc 根据索引标签选择。
df.iloc[0]  # 选择第一行
Name      Alice
Age          25
Salary    50000
Name: 0, dtype: object
df.loc[0]  # 如果有标签索引,也可以使用 loc
Name      Alice
Age          25
Salary    50000
Name: 0, dtype: object
iloc 和 loc的区别

iloc 是通过行列的整数位置(位置编号)来进行数据选择的。

# 选择第一行
df.iloc[0]
# 输出:
# Name      Alice
# Age          25
# Salary    50000
# Name: 0, dtype: object

# 选择第一行第一列的元素
df.iloc[0, 0]
# 输出: 'Alice'

# 选择前两行和所有列
df.iloc[:2, :]
# 输出:
#    Name  Age  Salary
# 0  Alice   25   50000
# 1    Bob   30   60000

NameAgeSalary
0Alice2550000
1Bob3060000

loc 是通过行列的标签(索引标签和列名)来进行数据选择的。
行索引可以是默认的整数,也可以是自定义的标签(例如日期、名字等),而列索引通常是列名。

# 选择标签为 0 的行(即第一行)
df.loc[0]
# 输出:
# Name      Alice
# Age          25
# Salary    50000
# Name: 0, dtype: object

# 选择 'Age' 列中标签为 0 的元素
df.loc[0, 'Age']
# 输出: 25

# 选择所有行的 'Name' 和 'Salary' 列
df.loc[:, ['Name', 'Salary']]
# 输出:
#      Name  Salary
# 0   Alice   50000
# 1     Bob   60000
# 2  Charlie   70000

# 通过条件选择:筛选出 Age 大于 25 的行
df.loc[df['Age'] > 25]
# 输出:
#      Name  Age  Salary
# 1     Bob   30   60000
# 2  Charlie   35   70000
NameAgeSalary
1Bob3060000
2Charlie3570000

切片行为

iloc:切片遵循 Python 的默认行为(右开区间),即 df.iloc[0:2] 会选择第 0 行和第 1 行,不包含第 2 行。
loc:切片是包含结束点的(右闭区间),即 df.loc[0:2] 会选择第 0 行到第 2 行,包含第 2 行。

灵活性

iloc 只能通过整数位置进行访问。
loc 更加灵活,支持标签索引和条件筛选。

2.2、Series的主要特性

Series 是 pandas 中的另一种基本数据结构,它是一维的类似于数组、列表或者字典的对象。每个 Series 包含两个主要部分:一组数据以及与数据对应的索引。Series 作为 DataFrame 的基础结构之一,可以看作是单列的数据表。

series的构成

数据(data):可以是任何一维的数据类型,比如列表、数组、字典、标量值等。

索引(index):与数据相关的标签,用于标识每个数据的位置。默认情况下,pandas 为每个数据赋予从 0 开始的整数索引,但也可以为 Series 指定自定义索引。

创建serise

Series 可以通过不同方式创建,常见的方法包括使用列表、字典、标量值或 numpy 数组。

import pandas as pd

data = [10, 20, 30, 40]
s = pd.Series(data)
print(s)
0    10
1    20
2    30
3    40
dtype: int64
# 通过字典创建
data = {'a': 10, 'b': 20, 'c': 30}
s = pd.Series(data)
print(s)
a    10
b    20
c    30
dtype: int64
# 通过标量创建
s = pd.Series(5, index=['a', 'b', 'c'])
print(s)
a    5
b    5
c    5
dtype: int64
Series的属性

values:返回数据部分的值,类型为 numpy 数组。
index:返回 Series 的索引。
dtype:返回 Series 中数据的类型。

s.values
array([5, 5, 5], dtype=int64)
s.index
Index(['a', 'b', 'c'], dtype='object')
s.dtype
dtype('int64')
访问和操作Serise
# 访问第一个元素
s.iloc[0]
5
# 通过标签访问 'a' 对应的值
s['a']
5
# 筛选大于 15 的元素
s[s > 15]
Series([], dtype: int64)
Series的常用操作

Series 支持许多类似于数组的操作,例如加法、减法、乘法、除法等。这些操作默认是逐元素应用的。

s = pd.Series([10, 20, 30, 40])

# 每个元素加 5
s + 5
0    15
1    25
2    35
3    45
dtype: int64

可以对 Series 应用函数,比如 numpy 函数或自定义函数。

import numpy as np

# 对每个元素取平方根
np.sqrt(s)
0    3.162278
1    4.472136
2    5.477226
3    6.324555
dtype: float64
# Series 支持类似于 cumsum(累加)等操作。
s.cumsum()
0     10
1     30
2     60
3    100
dtype: int64
与DataFrame的关系

Series 可以看作是一个单独的列,DataFrame 是由多个 Series 组成的二维表格型数据结构。可以从 DataFrame 中提取出某列并将其作为 Series 进行操作

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

# 提取 DataFrame 中的 A 列作为 Series
s = df['A']

3、数据读写

Pandas 提供了丰富的数据输入输出功能,支持从 CSV、Excel、SQL、JSON 等文件读取数据,并能将处理后的数据保存为这些格式

# 读取CSV文件
import pandas as pd

# 读取 CSV 文件
df = pd.read_csv('your_file.csv')

常用参数:
sep:指定分隔符,默认是逗号 ,,可以修改为其他分隔符如 ‘\t’。
header:指定是否有标题行,默认第一行为标题。
names:如果没有标题行,可以用 names 参数指定列名。
usecols:读取特定的列。

# 读取 Excel 文件
df = pd.read_excel('file.xlsx', sheet_name='Sheet1')

常用参数:
sheet_name:指定要读取的工作表,默认为第一个工作表。
header:指定是否有标题行。

# 读取 JSON 文件
df = pd.read_json('file.json')
# 从SQL数据库中读取数据
import sqlite3

# 连接到 SQLite 数据库
conn = sqlite3.connect('database.db')

# 从 SQL 查询结果中读取数据
df = pd.read_sql('SELECT * FROM table_name', conn)
# 写入 CSV 文件
df.to_csv('output.csv', index=False)

常用参数:
index:是否写入行索引,默认是 True,可以设为 False 以忽略索引。
sep:指定分隔符,默认为逗号 ,。
columns:指定要写入的列

# 写入 Excel 文件
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)

sheet_name:指定工作表的名称。
index:是否写入行索引,默认是 True。

# 写入 JSON 文件
df.to_json('output.json', orient='records')

常用参数:

orient:指定 JSON 文件的格式,常见的有 ‘split’、‘records’、‘index’ 等

# 写入 SQL 数据库
df.to_sql('table_name', conn, if_exists='replace', index=False)

常用参数:

name:表名。
con:数据库连接对象。
if_exists:指定如果表已存在的处理方式,如 ‘replace’(替换)、‘append’(追加)或 ‘fail’(报错)。

4、数据清洗和操作

提供处理缺失数据(NaN)的工具,比如填充、删除缺失值。
数据筛选和过滤功能,可以方便地根据条件进行数据筛选。
支持数据排序、分组和聚合(groupby 功能),适合进行数据分析和统计。

4.1、大文件的处理

当处理大型文件时,可以使用以下技巧来优化读取速度

分块读取

使用 chunksize 参数将大文件分成小块逐步读取。

for chunk in pd.read_csv('large_file.csv', chunksize=10000):
    process(chunk)  # 对每个块进行处理,process为自定义的处理数据的函数
指定列

使用 usecols 只读取需要的列,减少内存占用。

df = pd.read_csv('file.csv', usecols=['col1', 'col2'])
指定数据类型

通过 dtype 参数预先设置列的数据类型,提升读取效率。
因为在默认情况下,pandas 会在读取数据时尝试自动推断每列的数据类型(如整数、浮点数、字符串等)。这一过程需要 pandas 扫描每一列的数据,并推测出最适合的数据类型。这会导致以下两种问题:

计算开销:自动推断数据类型会消耗额外的计算资源和时间,尤其在数据量大时更加明显。

内存占用:pandas 默认会将整数列推断为 int64 类型,浮点数列推断为 float64 类型。这些 64 位的数据类型虽然精度高,但会占用更多的内存。在实际应用中,如果只需要较小的整数或精度较低的浮点数,使用 32 位或更小的类型可以减少内存占用并加速读取。

df = pd.read_csv('file.csv', dtype={'col1': 'int32', 'col2': 'float64'})

4.2、处理缺失值

在读取数据时,pandas 会自动将无法识别的数据标记为缺失值 NaN。可以使用以下方法处理缺失值:

dropna():删除包含缺失值的行或列。
fillna():用特定值填充缺失值。

df.dropna()  # 删除包含缺失值的行
df.fillna(0)  # 用 0 填充缺失值

5、时间序列处理

Pandas 提供了丰富的时间序列工具,包括时间戳、时间范围生成、重采样等,非常适合金融和经济数据分析。

下篇博客专门讲解如何用Pandas做时间序列处理,欢迎大家关注~~~

6、数据可视化

虽然 Pandas 不是一个可视化库,但它可以与 Matplotlib 等库无缝结合,快速生成图表,如折线图、柱状图、直方图等。

** 这个以后再更新~~~**

有用的话,希望小伙伴们点个赞 和 关注,新人求赞~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值