DataFrame 是 Pandas 核心二维数据结构,类似 Excel 表格或 SQL 数据表,支持多种数据类型、灵活索引及丰富的数据处理操作,是数据分析的核心工具。

一、核心特点

  • 二维结构:由行和列组成,可看作多个共享同一索引的 Series 集合
  • 类型灵活:不同列可存储整数、字符串、布尔值等不同数据类型
  • 双索引体系:同时支持行索引(index)和列索引(columns)
  • 功能完备:内置数据访问、筛选、清洗、聚合、可视化衔接等功能
  • 缺失值支持:用 NaN 表示缺失数据,提供专门的处理方法
  • 跨格式兼容:轻松读取 / 写入 CSV、Excel、SQL 等多种数据格式

二、构造方法(含代码示例)

DataFrame 支持多种数据输入创建,以下是最常用的 4 种方式:

1. 列表创建

import pandas as pd
# 外层列表为行,内层列表为列数据
data = [['Google', 10], ['Runoob', 12], ['Wiki', 13]]
# 指定列名,后续可通过 astype 设定数据类型
df = pd.DataFrame(data, columns=['Site', 'Age'])
df['Site'] = df['Site'].astype(str)  # 字符串类型
df['Age'] = df['Age'].astype(float)  # 浮点型
print(df)

2. 字典创建

import pandas as pd
# 字典的键为列名,值为列数据(列表形式)
data = {'Site': ['Google', 'Runoob', 'Wiki'], 'Age': [10, 12, 13]}
df = pd.DataFrame(data)
print(df)

# 处理缺失数据场景
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)  # 缺失值自动填充为 NaN
print(df)

3. NumPy 数组创建

import pandas as pd
import numpy as np
# 二维 ndarray 作为数据,需保证每行长度一致
ndarray_data = np.array([['Google', 10], ['Runoob', 12], ['Wiki', 13]])
df = pd.DataFrame(ndarray_data, columns=['Site', 'Age'])
print(df)

4. Series 组合创建

import pandas as pd
# 多个 Series 共享索引,组合为 DataFrame
s1 = pd.Series(['Alice', 'Bob', 'Charlie'])
s2 = pd.Series([25, 30, 35])
s3 = pd.Series(['New York', 'Los Angeles', 'Chicago'])
df = pd.DataFrame({'Name': s1, 'Age': s2, 'City': s3})
print(df)

三、构造函数参数(表格汇总)

参数名功能描述默认值
data输入数据,可接受字典、二维数组、Series、DataFrame 等None
index行索引,支持列表、数组、索引对象默认整数索引(0,1,2...)
columns列索引,支持列表、数组、索引对象默认整数索引(0,1,2...)
dtype数据类型,可指定 NumPy 数据类型(如 np.int64)自动推断
copy是否复制输入数据False

四、常用属性(快速查看数据信息)

属性名功能描述示例
shape返回数据维度(行数,列数)df.shape → (3,2)
columns返回所有列名df.columns → Index(['Site', 'Age'], dtype='object')
index返回行索引df.index → Index(['day1','day2'], dtype='object')
dtypes返回各列数据类型df.dtypes → Site: object, Age: float64
info()显示数据概要(非空值、类型、内存占用)df.info()
describe()数值列统计信息(均值、标准差等)df.describe()

五、核心操作(含代码示例)

1. 数据访问

import pandas as pd
data = {"calories": [420, 380, 390], "duration": [50, 40, 45]}
df = pd.DataFrame(data, index=["day1", "day2", "day3"])

# 按列访问
print(df['calories'])  # 通过列名
print(df.calories)     # 属性式访问(列名无空格时)

# 按行访问
print(df.loc["day2"])  # 按标签索引
print(df.iloc[1])      # 按位置索引(第2行)

# 访问多行/多列
print(df.loc[["day1", "day3"]])  # 多行
print(df[['calories', 'duration']])  # 多列

# 访问单个元素
print(df.loc["day1", "calories"])  # 标签定位
print(df.iloc[0, 0])              # 位置定位
print(df.at["day1", "calories"])  # 高效访问单个元素

2. 数据修改

# 修改列数据
df['calories'] = [450, 400, 420]

# 添加新列
df['burned'] = [200, 180, 190]

# 添加新行(推荐 concat,append 已弃用)
new_row = pd.DataFrame([[350, 35, 170]], columns=['calories','duration','burned'], index=['day4'])
df = pd.concat([df, new_row], ignore_index=False)

# 删除列
df = df.drop('burned', axis=1)

# 删除行
df = df.drop('day4')

3. 缺失值与重复值处理

# 填充缺失值
df['Age'] = df['Age'].fillna(30)  # 用30填充 NaN

# 删除缺失值
df_clean = df.dropna()  # 删除含 NaN 的行(axis=0)

# 检测重复行
print(df.duplicated())  # 布尔值表示是否重复

# 删除重复行
df_unique = df.drop_duplicates()

4. 排序与分组

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

# 按索引排序
df_sorted_idx = df.sort_index()

# 分组统计
grouped = df.groupby('City')['Age'].mean()  # 按城市分组计算平均年龄

5. 数据合并与分割

# 纵向合并(追加行)
df1 = pd.DataFrame({'a': [1,2], 'b': [3,4]})
df2 = pd.DataFrame({'a': [5,6], 'b': [7,8]})
df_concat = pd.concat([df1, df2], ignore_index=True)

# 横向合并(关联列)
df3 = pd.DataFrame({'a': [1,2], 'c': [9,10]})
df_merge = pd.merge(df1, df3, on='a')  # 按 a 列关联

# 长格式转宽格式(透视表)
df_pivot = df.pivot(index='Name', columns='City', values='Age')

六、常用方法汇总(核心功能速查)

方法名功能描述
head(n)返回前 n 行数据(默认 5 行)
tail(n)返回后 n 行数据(默认 5 行)
sort_values(by)按指定列排序
dropna()删除含缺失值的行 / 列
fillna(value)填充缺失值
query()SQL 风格查询数据(如 df.query ("Age>30"))
to_csv()导出为 CSV 文件
to_excel()导出为 Excel 文件
apply(func)对列 / 行应用自定义函数
groupby(by)分组汇总统计

七、注意事项

  • 避免使用 append () 方法:该方法已弃用,推荐用 concat () 实现数据追加
  • 索引对齐特性:算术运算时会自动按索引对齐数据,需注意索引一致性
  • 数据类型转换:用 astype () 方法明确指定类型,避免自动推断导致的错误
  • 内存优化:对于大数据集,可指定 dtype 为更小的类型(如 int32 替代 int64)

感谢大家的阅读 制作不易 麻烦各位点点关注和收藏 每天8点持续更新!!!

更多推荐