DataFrame 可以通过多种方式创建,最常用的是通过字典、列表、NumPy 数组,或从外部文件读取。
import pandas as pd
data = {
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 28],
'城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)
print(df)
字典的键成为列名,值为列数据。
data = [['张三', 25, '北京'],
['李四', 30, '上海'],
['王五', 28, '广州']]
df = pd.DataFrame(data,
columns=['姓名','年龄','城市'])
print(df)
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
df = pd.DataFrame(arr,
columns=['A','B','C'])
print(df)
# 读取同目录下的 data.csv 文件
df = pd.read_csv('data.csv')
print(df.head())
后面章节会详细讲解文件读写。
创建 DataFrame 后,可以通过以下属性和方法快速了解数据概况:
.shape (行数,列数)
.columns 列名
.index 行索引
.dtypes 每列数据类型
.info() 内存使用和类型
.describe() 数值列统计
.head(n) 前n行
.tail(n) 后n行
# 创建示例 DataFrame
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [25, 30, 28, 35],
'工资': [8000, 12000, 9500, 15000]
})
print("形状:", df.shape)
print("列名:", df.columns.tolist())
print("数据类型:\n", df.dtypes)
print("\n前2行:\n", df.head(2))
print("\n描述统计:\n", df.describe())
DataFrame 提供了灵活的数据选择方式,包括列选择、行选择、切片和条件筛选。
# 选择单列,返回 Series
print(df['姓名'])
# 选择多列,返回 DataFrame
print(df[['姓名', '工资']])
# 使用点号选择(列名必须是有效标识符)
print(df.年龄)
推荐使用 .loc[] (基于标签) 和 .iloc[] (基于整数位置) 进行行选择。
# 使用 .iloc[] 按位置选择
print(df.iloc[0]) # 第一行
print(df.iloc[1:3]) # 第二到第三行(不含第四行)
# 使用 .loc[] 按标签选择
df.index = ['a', 'b', 'c', 'd'] # 自定义行索引
print(df.loc['b']) # 行标签为 'b' 的行
print(df.loc['b':'d']) # 切片包含结束
# 选择第0行,第1列
print(df.iloc[0, 1]) # 输出: 25
# 选择行 'b' 到 'd' 的 '姓名' 和 '工资' 列
print(df.loc['b':'d', ['姓名', '工资']])
# 筛选年龄大于28的行
print(df[df['年龄'] > 28])
# 多条件筛选(使用 & 表示与,| 表示或)
print(df[(df['年龄'] > 25) & (df['工资'] < 15000)])
# 添加新列
df['部门'] = ['销售', '技术', '技术', '管理']
# 删除列
df.drop('部门', axis=1, inplace=True)
# 插入列到指定位置
df.insert(2, '性别', ['男','男','女','男'])
# 按年龄升序
df.sort_values('年龄', inplace=True)
# 按工资降序
df.sort_values('工资', ascending=False, inplace=True)
# 检查缺失值
df.isna().sum()
# 删除含有缺失值的行
df.dropna(inplace=True)
# 填充缺失值
df.fillna(0, inplace=True)
# 按部门分组,计算平均工资
df.groupby('部门')['工资'].mean()
DataFrame 可以看作是 Series 的字典:每一列都是一个 Series,共享相同的行索引。从 DataFrame 中选取一列就得到一个 Series。
# 选取一列返回 Series
age_series = df['年龄']
print(type(age_series)) #
# 对 Series 进行操作
print(age_series.mean())
| 数据结构 | 维度 | 描述 |
|---|---|---|
| Series | 1维 | 带标签的一维数组,类似于带索引的列表 |
| DataFrame | 2维 | 表格型数据结构,由多个 Series 共用索引构成 |