ai
  • index
  • cursor
  • vector
  • crawl
  • crawl-front
  • DrissionPage
  • logging
  • mysql
  • pprint
  • sqlalchemy
  • contextmanager
  • dotenv
  • Flask
  • python
  • job
  • pdfplumber
  • python-docx
  • redbook
  • douyin
  • ffmpeg
  • json
  • numpy
  • opencv-python
  • pypinyin
  • re
  • requests
  • subprocess
  • time
  • uuid
  • watermark
  • milvus
  • pymilvus
  • search
  • Blueprint
  • flash
  • Jinja2
  • secure_filename
  • url_for
  • Werkzeug
  • chroma
  • HNSW
  • pillow
  • pandas
  • beautifulsoup4
  • langchain-community
  • langchain-core
  • langchain
  • langchain_unstructured
  • libreoffice
  • lxml
  • openpyxl
  • pymupdf
  • python-pptx
  • RAGFlow
  • tabulate
  • sentence_transformers
  • jsonl
  • collections
  • jieba
  • rag_optimize
  • rag
  • rank_bm25
  • Hugging_Face
  • modelscope
  • all-MiniLM-L6-v2
  • ollama
  • rag_measure
  • ragas
  • ASGI
  • FastAPI
  • FastChat
  • Jupyter
  • PyTorch
  • serper
  • uvicorn
  • markdownify
  • NormalizedLevenshtein
  • raq-action
  • CrossEncoder
  • Bi-Encoder
  • neo4j
  • neo4j4python
  • matplotlib
  • Plotly
  • Streamlit
  • py2neo
  • abc
  • read_csv
  • neo4jinstall
  • APOC
  • neo4jproject
  • uv
  • GDS
  • heapq
  • 1. Pandas 核心数据结构
    • 1.1 Series
    • 1.2 DataFrame
  • 2. 数据读取与写入
  • 3. 数据查看与检查
  • 4. 数据选择与过滤
    • 4.1 选择列
    • 4.2 选择行
    • 4.3 混合选择
  • 5. 数据处理
    • 5.1 缺失值处理
    • 5.2 数据转换
    • 5.3 排序
  • 6. 数据分组与聚合
  • 7. 数据合并与连接
  • 8. 时间序列处理
  • 9. 性能优化技巧
  • 10. 可视化

Pandas 是 Python 中一个强大的开源数据分析和操作库,特别适合处理表格数据和时间序列数据。下面我将从基础到高级详细介绍 Pandas 的主要功能。

1. Pandas 核心数据结构 #

Pandas 有两个主要数据结构:

1.1 Series #

Series 是一维带标签的数组,可以存储任何数据类型。

# 导入 pandas 和 numpy 库
import pandas as pd
import numpy as np

# 创建 Series
# 创建一个包含整数和缺失值的 Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
# 打印 Series
print(s)

# 带自定义索引
# 创建一个带有自定义索引的 Series
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
# 打印带索引的 Series
print(s)

1.2 DataFrame #

DataFrame 是二维的、大小可变的、潜在的异构的表格数据结构。

# 导入 pandas 和 numpy 库
import pandas as pd
import numpy as np

# 创建 DataFrame
# 创建一个包含多种数据类型的 DataFrame
# 'A' 列为浮点数,'B' 列为时间戳,'C' 列为 float32,'D' 列为 int32,'E' 列为分类,'F' 列为字符串

df = pd.DataFrame({
    'A': 1.,  # 浮点数
    'B': pd.Timestamp('20230101'),  # 时间戳
    'C': pd.Series(1, index=list(range(4)), dtype='float32'),  # float32 类型的 Series
    'D': np.array([3] * 4, dtype='int32'),  # int32 类型的 numpy 数组
    'E': pd.Categorical(["test", "train", "test", "train"]),  # 分类数据
    'F': 'foo'  # 字符串
})
# 打印 DataFrame
print(df)

2. 数据读取与写入 #

Pandas 支持多种文件格式:

# 导入 pandas 库
import pandas as pd

# 读取 CSV
# 从本地文件读取 CSV 文件,文件名为 'file.csv'
df = pd.read_csv('file.csv')

# 读取 Excel
# 从本地 Excel 文件读取数据,文件名为 'file.xlsx',读取名为 'Sheet1' 的工作表
df = pd.read_excel('file.xlsx', sheet_name='Sheet1')

# 读取 SQL
# 导入 sqlite3 库
import sqlite3
# 连接到本地 SQLite 数据库,数据库文件名为 'database.db'
conn = sqlite3.connect('database.db')
# 执行 SQL 查询并读取结果到 DataFrame
df = pd.read_sql('SELECT * FROM table_name', conn)

# 写入文件
# 将 DataFrame 写入 CSV 文件,不包含索引
df.to_csv('output.csv', index=False)
# 将 DataFrame 写入 Excel 文件
df.to_excel('output.xlsx')

3. 数据查看与检查 #

# 查看前几行
# 显示 DataFrame 的前 5 行
df.head()

# 查看后几行
# 显示 DataFrame 的后 5 行
df.tail()

# 查看索引
# 获取 DataFrame 的索引对象
df.index

# 查看列名
# 获取 DataFrame 的所有列名
df.columns

# 查看统计摘要
# 显示数值型数据的统计摘要
df.describe()

# 查看数据类型
# 显示每一列的数据类型
df.dtypes

# 查看数据形状
# 显示 DataFrame 的行数和列数
df.shape

# 查看缺失值
# 统计每一列的缺失值数量
df.isnull().sum()

4. 数据选择与过滤 #

4.1 选择列 #

# 选择单列
# 选择名为 'column_name' 的列
df['column_name']

# 选择多列
# 选择名为 'col1' 和 'col2' 的两列
df[['col1', 'col2']]

4.2 选择行 #

# 通过索引标签
# 通过标签选择索引为 'index_label' 的行
df.loc['index_label']

# 通过位置
# 选择第一行
df.iloc[0]
# 选择前 5 行
df.iloc[0:5]

# 布尔索引
# 选择 'column' 列大于 0.5 的所有行
df[df['column'] > 0.5]

4.3 混合选择 #

# 选择特定行和列
# 通过标签选择多行多列
df.loc[['row1', 'row2'], ['col1', 'col2']]
# 通过位置选择多行多列
df.iloc[0:2, 0:2]

5. 数据处理 #

5.1 缺失值处理 #

# 删除缺失值
# 删除包含缺失值的行
df.dropna()

# 填充缺失值
# 用 0 填充所有缺失值
df.fillna(value=0)
# 用前一个非缺失值填充缺失值
df.fillna(method='ffill')

5.2 数据转换 #

# 应用函数
# 对 'column' 列的每个元素乘以 2
df['column'].apply(lambda x: x * 2)

# 替换值
# 将 'old_value' 替换为 'new_value'
df.replace({'old_value': 'new_value'})

# 重命名列
# 将 'old_name' 列重命名为 'new_name'
df.rename(columns={'old_name': 'new_name'})

# 类型转换
# 将 'column' 列的数据类型转换为 float
df['column'].astype('float')

5.3 排序 #

# 按值排序
# 按 'column' 列的值进行排序
df.sort_values(by='column')

# 按索引排序
# 按索引进行排序
df.sort_index()

6. 数据分组与聚合 #

# 分组
# 按 'column' 列进行分组
grouped = df.groupby('column')

# 聚合
# 对分组后的数据进行求和、均值和计数
grouped.agg(['sum', 'mean', 'count'])

# 多重聚合
# 按 'col1' 和 'col2' 分组,对 'col3' 求和,对 'col4' 求均值
df.groupby(['col1', 'col2']).agg({'col3': 'sum', 'col4': 'mean'})

7. 数据合并与连接 #

# 连接
# 纵向连接两个 DataFrame
pd.concat([df1, df2])

# 合并
# 按照 'key_column' 列进行合并
pd.merge(df1, df2, on='key_column')

# 连接
# 按索引左连接两个 DataFrame
df1.join(df2, how='left')

8. 时间序列处理 #

# 导入 pandas 和 numpy 库
import pandas as pd
import numpy as np

# 创建时间序列
# 生成从 2023-01-01 开始的 6 天日期序列
dates = pd.date_range('20230101', periods=6)

# 时间作为索引
# 创建一个以日期为索引、包含 4 列随机数的 DataFrame
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

# 重采样
# 按月重采样并计算均值
df.resample('M').mean()

# 移动窗口
# 计算 3 行的滑动平均值
df.rolling(window=3).mean()

9. 性能优化技巧 #

# 使用矢量化操作代替循环
# 直接对两列相加,生成新列 'new_col'
df['new_col'] = df['col1'] + df['col2']

# 使用 eval() 进行表达式求值
# 用 eval 方法直接在 DataFrame 内部进行列运算
df.eval('new_col = col1 + col2', inplace=True)

# 使用 query() 进行查询
# 用 query 方法筛选 'col1' 大于 'col2' 的行
df.query('col1 > col2')

# 使用类别数据类型节省内存
# 将 'category_col' 列转换为类别类型
df['category_col'] = df['category_col'].astype('category')

10. 可视化 #

Pandas 集成了 Matplotlib 的绘图功能:

# 导入 pandas 和 matplotlib 库
import pandas as pd
import matplotlib.pyplot as plt

# 假设已有 DataFrame df
# 画线图
df.plot()
plt.show()

# 画柱状图
df.plot.bar()
plt.show()

# 画直方图
df.plot.hist()
plt.show()

# 画散点图
df.plot.scatter(x='col1', y='col2')
plt.show()

# 画箱线图
df.plot.box()
plt.show()

访问验证

请输入访问令牌

Token不正确,请重新输入