[python]Dataframe数据对象(介绍)

784 阅读4分钟

pandas中的DataFrame对象详解

1. DataFrame是什么?

DataFrame是pandas库中的核心数据结构,它是一个二维的、大小可变、可以存储多种类型数据的表格型数据结构。可以将其理解为:

  • 类似于Excel电子表格 - 有行和列的数据表
  • 类似于SQL表 - 具有行和列的数据库表结构
  • 类似于R语言的data.frame - 为数据分析而设计的表格结构

2. DataFrame的主要特点

(1) 二维表格结构

  • 行索引(index)列索引(columns)
  • 同一列中的数据必须是相同类型,但不同列可以是不同类型。

(2) 大小可变

  • 可以动态添加/删除行和列
  • 可以改变DataFrame的形状

(3) 灵活的数据处理能力

  • 强大的数据清洗功能
  • 支持数据对齐(自动对齐索引)
  • 处理缺失数据(NaN)的能力

(4) 丰富的操作接口

  • 类似SQL的查询和过滤
  • 分组聚合(groupby)
  • 数据合并(merge, concat)
  • 数据透视表(pivot_table)

3. DataFrame的用途

数据处理和分析

import pandas as pd
import numpy as np

# 1. 数据清洗
# 处理缺失值、异常值、重复值等

# 2. 数据转换
# 类型转换、数据规范化、特征工程

# 3. 数据分析
# 统计分析、聚合分析、趋势分析

# 4. 数据可视化
# 配合matplotlib, seaborn进行可视化

# 5. 机器学习的预处理
# 特征提取、数据划分等

4. DataFrame的创建方式

(1) 从字典创建

# 字典的键成为列名,值成为列数据
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 28],
    'City': ['NYC', 'LA', 'Chicago', 'Houston'],
    'Salary': [50000, 60000, 75000, 55000]
}

df = pd.DataFrame(data)
print(df)

(2) 从列表创建

# 列表的每个元素是一行数据
data = [
    ['Alice', 25, 'NYC', 50000],
    ['Bob', 30, 'LA', 60000],
    ['Charlie', 35, 'Chicago', 75000],
    ['David', 28, 'Houston', 55000]
]

columns = ['Name', 'Age', 'City', 'Salary']
df = pd.DataFrame(data, columns=columns)

(3) 从文件读取

# 从CSV文件
df = pd.read_csv('data.csv')

# 从Excel文件
df = pd.read_excel('data.xlsx')

# 从SQL数据库
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql_query("SELECT * FROM table", conn)

5. DataFrame的基本操作

(1) 查看数据

df.head()      # 前几行
df.tail()      # 后几行
df.info()      # 数据信息
df.describe()  # 统计描述
df.shape       # 形状(行数,列数)
df.columns     # 列名
df.index       # 行索引

(2) 选择数据

# 选择列
df['Name']            # 单列(返回Series)
df[['Name', 'Age']]   # 多列(返回DataFrame)

# 选择行
df.iloc[0]           # 按位置选择行
df.loc[0]            # 按标签选择行
df[0:3]              # 切片选择行

# 布尔索引
df[df['Age'] > 30]                    # 条件过滤
df[(df['Age'] > 25) & (df['Salary'] > 60000)]  # 多条件

(3) 修改数据

# 添加新列
df['Bonus'] = df['Salary'] * 0.1

# 修改列
df['Salary'] = df['Salary'] * 1.05  # 涨薪5%

# 删除列
df = df.drop(columns=['Bonus'])     # 删除指定列

# 删除行
df = df.drop([0, 1])                # 删除指定行

(4) 数据排序

# 按列排序
df.sort_values(by='Salary', ascending=False)

# 按多列排序
df.sort_values(by=['City', 'Salary'], ascending=[True, False])

6. 高级功能

(1) 分组聚合

# 基本分组
grouped = df.groupby('City')
grouped['Salary'].mean()  # 每个城市的平均薪资

# 多重分组
df.groupby(['City', 'Age']).agg({
    'Salary': ['mean', 'min', 'max', 'count']
})

(2) 数据合并

# 类似SQL的JOIN操作
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value': [4, 5, 6]})

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

# 外连接
pd.merge(df1, df2, on='key', how='outer')

(3) 数据透视表

# 创建透视表
pivot_table = df.pivot_table(
    values='Salary',
    index='City',
    columns='Age',
    aggfunc='mean',
    fill_value=0
)

(4) 处理缺失值

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

# 删除缺失值
df.dropna()

# 填充缺失值
df.fillna(0)                    # 填充0
df.fillna(method='ffill')       # 向前填充
df.fillna(df.mean())            # 用均值填充

7. 性能特点

优势:

  1. 高效的数据处理 - 底层使用NumPy数组,向量化操作
  2. 内存优化 - 支持数据类型优化
  3. 快速I/O - 支持多种文件格式的快速读写
  4. 灵活的数据转换 - 丰富的API支持复杂转换

注意事项:

  1. 数据量过大时 - 需要考虑内存使用
  2. 循环操作慢 - 应尽量使用向量化操作而非循环
  3. 链式操作 - 注意内存使用和性能

8. 实际应用示例

# 完整的数据分析流程示例
def analyze_employee_data(filepath):
    """分析员工数据"""
    # 1. 加载数据
    df = pd.read_csv(filepath)
    
    # 2. 数据清洗
    df = df.dropna()  # 删除缺失值
    df = df.drop_duplicates()  # 删除重复值
    
    # 3. 数据转换
    df['Join_Date'] = pd.to_datetime(df['Join_Date'])
    df['Years_of_Service'] = (pd.Timestamp.now() - df['Join_Date']).dt.days / 365
    
    # 4. 数据分析
    department_stats = df.groupby('Department').agg({
        'Salary': ['mean', 'median', 'std'],
        'Age': 'mean',
        'Employee_ID': 'count'
    }).round(2)
    
    # 5. 高级分析
    df['Salary_Category'] = pd.cut(
        df['Salary'],
        bins=[0, 50000, 80000, float('inf')],
        labels=['Low', 'Medium', 'High']
    )
    
    return df, department_stats

# 使用示例
df_result, stats = analyze_employee_data('employees.csv')
print(df_result.head())
print("\n部门统计:")
print(stats)

总结

DataFrame是pandas的核心,它提供了:

  1. 直观的数据结构 - 类似Excel的表格形式
  2. 强大的数据处理能力 - 支持复杂的查询、过滤、转换操作
  3. 高效的计算性能 - 基于NumPy的向量化计算
  4. 丰富的数据分析功能 - 统计、聚合、可视化等
  5. 灵活的数据整合 - 支持多种数据源和格式

对于数据分析、数据科学和机器学习项目,DataFrame是Python生态中最重要、最常用的数据处理工具之一。掌握DataFrame的使用是进行Python数据分析的基础。