当前位置: 首页 > news >正文

Python :Pandas

Pandas的核心内容

1. Pandas 是什么?

  • 定义:Pandas 是 Python 中用于数据操作和分析的核心库,尤其擅长处理结构化数据(如表格、时间序列)。
  • 核心数据结构
    • Series:一维数组,带标签(类似字典)。
    • DataFrame:二维表格,由多个 Series 组成(核心工具)。
1.1 Series(一维带标签数组)​
  • 创建 Series

    import pandas as pd
    
    # 从列表创建
    s = pd.Series([10, 20, 30, 40], name='age', index=['a', 'b', 'c', 'd'])
    print(s)

    输出

    a    10
    b    20
    c    30
    d    40
    Name: age, dtype: int64
  • 操作 Series

    s.values  # 输出数组:[10, 20, 30, 40]
    s.index   # 输出索引:Index(['a', 'b', 'c', 'd'], dtype='object')
    s['a']    # 按标签取值 → 10
    s[0]      # 按位置取值 → 10

1.2 DataFrame(二维表格数据)​
  • 创建 DataFrame

    data = {
        'name': ['Alice', 'Bob', 'Charlie'],
        'age': [25, 30, 35],
        'city': ['New York', 'Paris', 'London']
    }
    df = pd.DataFrame(data)
    print(df)

    输出

         name  age      city
    0    Alice   25  New York
    1      Bob   30     Paris
    2  Charlie   35    London
  • 关键属性

    df.shape    # 形状:(3, 3)
    df.columns  # 列名:Index(['name', 'age', 'city'], dtype='object')
    df.index    # 行索引:RangeIndex(start=0, stop=3, step=1)

2. 核心操作详解

2.1 创建 DataFrame
import pandas as pd

# 从字典创建
data = {
    "Name": ["Alice", "Bob", "Charlie"],
    "Age": [25, 30, 35],
    "City": ["New York", "Paris", "London"]
}
df = pd.DataFrame(data)
print(df)

输出

      Name  Age      City
0    Alice   25  New York
1      Bob   30     Paris
2  Charlie   35    London
数据输入与输出
2.1.1读取数据
# 从 CSV 读取
df = pd.read_csv('data.csv', encoding='utf-8', parse_dates=['date_column'])

# 从 Excel 读取
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 常用参数:
# - header=0(指定列标题行)
# - na_values=['NA', 'N/A'](定义缺失值符号)
2.1.2保存数据
# 保存为 CSV
df.to_csv('output.csv', index=False)

# 保存为 Excel
df.to_excel('output.xlsx', sheet_name='Data')

2.2 数据查看与统计
# 查看前3行
df.head(3)

# 查看数据基本信息(列名、类型、缺失值)
df.info()

# 描述性统计(数值列)
df.describe()

# 查看唯一值
df["City"].unique()  # 输出:['New York', 'Paris', 'London']

 数据清洗与预处理

处理缺失值

# 检查缺失值
df.isnull().sum()

# 删除缺失值
df.dropna(axis=0)     # 删除含缺失值的行
df.dropna(subset=['age'])  # 删除 age 列缺失的行

# 填充缺失值
df['age'].fillna(df['age'].mean(), inplace=True)  # 用均值填充
df.fillna({'city': 'Unknown', 'age': 0}, inplace=True)  # 按列填充

类型转换

# 转换列类型
df['age'] = df['age'].astype(int)
df['date'] = pd.to_datetime(df['date'])

# 优化内存
df['city'] = df['city'].astype('category')  # 对低基数列节省内存

 去重

df.drop_duplicates(subset=['name', 'city'], keep='first')  # 保留第一个重复值
2.3 数据筛选
  • 按列筛选
    df["Name"]          # 选择单列 → Series
    df[["Name", "Age"]] # 选择多列 → DataFrame
  • 按行筛选
    # 按位置选择
    df.iloc[0]       # 第0行
    df.iloc[1:3]     # 第1-2行
    
    # 按条件筛选
    df[df["Age"] > 25]              # 年龄>25的行
    df.query("Age > 25 & City == 'Paris'")  # 使用 query 方法

 选择数据

# 按列选择
df['name']          # 返回 Series
df[['name', 'age']] # 返回 DataFrame

# 按行选择
df.iloc[0]        # 第0行(按位置)
df.loc[df['age'] > 25]  # 按条件筛选(返回年龄>25的行)

# 混合选择(行+列)
df.loc[df['age'] > 25, ['name', 'city']]

2.4 处理缺失值
# 检查缺失值
df.isnull().sum()

# 删除缺失值
df.dropna()      # 删除包含缺失值的行
df.dropna(axis=1) # 删除包含缺失值的列

# 填充缺失值
df.fillna(0)                # 用0填充
df["Age"].fillna(df["Age"].mean(), inplace=True)  # 用均值填充

2.5 数据排序
# 按列排序
df.sort_values("Age", ascending=False)  # 降序排列

# 多列排序
df.sort_values(["City", "Age"], ascending=[True, False])

2.6 添加/删除列
# 添加新列
df["Salary"] = [70000, 80000, 90000]

# 删除列
df.drop("City", axis=1, inplace=True)

 新增/删除列

# 新增列
df['salary'] = [50000, 60000, 70000]

# 基于计算新增列
df['age_plus_10'] = df['age'] + 10

# 删除列
df.drop(columns=['city'], inplace=True)


3. 数据分组与聚合

3.1 分组统计
# 按城市分组,计算平均年龄
df.groupby("City")["Age"].mean()

# 多级分组
df.groupby(["City", "Salary"]).agg({"Age": "mean", "Salary": "sum"})
3.2 聚合函数
# 对分组数据应用多种聚合
df.groupby("City").agg(
    Avg_Age=("Age", "mean"),
    Max_Salary=("Salary", "max")
)

数据透视表

# 类似 Excel 数据透视表
pd.pivot_table(df, values='salary', index='city', columns='gender', aggfunc='mean')

4. 数据合并

4.1 按列合并(JOIN)​
df1 = pd.DataFrame({'id': [1, 2], 'name': ['A', 'B']})
df2 = pd.DataFrame({'id': [1, 2], 'salary': [100, 200]})

# 内连接
pd.merge(df1, df2, on='id', how='inner')

# 左连接
pd.merge(df1, df2, on='id', how='left')
4.2 按行合并(UNION)​
pd.concat([df1, df2], axis=0)  # 垂直堆叠(需列名一致)

5. 高级功能

5.1 应用函数
# 对列应用函数
df["Age_Squared"] = df["Age"].apply(lambda x: x ​** 2)

# 对行应用函数
df.apply(lambda row: row["Salary"] / row["Age"], axis=1)
5.2 处理时间序列
# 转换为时间类型
df['date'] = pd.to_datetime(df['date'])

# 设置时间索引
df.set_index('date', inplace=True)

# 按时间重采样(例如按月统计)
df.resample('M').mean()

# 计算时间差
df['days_since_event'] = (pd.Timestamp.now() - df['date']).dt.days

6. 性能优化技巧 

  1. 避免逐行操作:使用向量化操作(如 df["col"] * 2)替代 apply
  2. 使用高效数据类型
    df["Category"] = df["Category"].astype("category")  # 节省内存
  3. 分块处理大数据:使用 chunksize 参数分块读取文件。
df['bonus'] = df['salary'] * 0.1  # 高效
chunks = pd.read_csv('large_data.csv', chunksize=10000)
for chunk in chunks:
    process(chunk)

 ​7. 实战场景示例

实战案例:销售数据分析

目标:统计每个地区的销售额和利润。
# 读取数据
sales = pd.read_csv('sales.csv', parse_dates=['order_date'])

# 清洗数据
sales.dropna(subset=['region', 'sales'], inplace=True)
sales['profit'] = sales['profit'].fillna(0)

# 分析
result = sales.groupby('region').agg(
    total_sales=('sales', 'sum'),
    avg_profit=('profit', 'mean')
).reset_index()

# 保存结果
result.to_csv('sales_summary.csv', index=False)

    相关文章:

  1. harmonyOS(鸿蒙)— 网络权限(解决app网络资源无法加载,图片无法显示)
  2. 帕金森病如何 “偷走” 患者的正常生活?
  3. gin框架
  4. ORACLE EBS数据库RELINK方式搭建克隆环境
  5. 黑色RGB是什么
  6. C#实现AES-CBC加密工具类(含完整源码及使用教程)
  7. 浮点数 NaN 彻底研究(linux 下 c环境测试)
  8. 贝壳找房:以 OceanBase 为 JuiceFS 元数据引擎,构建 AI 存储底座
  9. tomcat配置应用----server.xml文件具体配置
  10. Redis Redis介绍、安装 - Redis客户端
  11. Linux-基础开发工具
  12. 【Academy】JWT 分析 ------ JWT
  13. element-plus中form表单组件的使用
  14. Python爬虫---中国大学MOOC爬取数据(文中有数据集)
  15. 软件工程概述
  16. pg_实例架构图解
  17. 使用jest测试用例之入门篇
  18. python高效试用17---两个字符串组成一个新的字符串和两个字符串组成元组作为key哪个更高效
  19. STM32 HAL库 CAN过滤器配置
  20. 【网络编程】原始套接字编程
  21. 南京英文网站建设/网站建设推广多少钱
  22. 手机友好型网站/网络推广公司运营
  23. 网站建设的看法有哪些/户外广告
  24. 岳阳网站制作/网络营销的现状和发展趋势
  25. 怎么做音乐网站/重庆seo关键词优化服务
  26. 维护网站费用怎么做会计凭证/seo外包优化