第3章:Python数据科学基础

说实话,很多初学者一上来就急着跑模型,结果连数据都读不进去。我见过太多这样的案例了。数据科学的基础,说白了就是三板斧:NumPy做数值计算,Pandas处理表格数据,再加上文件读写。这三样玩熟了,后面建模才能顺手。

3.1 NumPy数组操作

NumPy是Python科学计算的基石。我刚开始做数据分析时,用的还是Python原生的列表,后来发现处理百万级数据时慢得让人抓狂。NumPy的数组操作,底层是用C语言实现的,速度能快几十倍。

创建数组

import numpy as np

# 从列表创建
arr1 = np.array([1, 2, 3, 4, 5])

# 创建全零数组
zeros = np.zeros((3, 4))

# 创建等差数列
seq = np.arange(0, 10, 2)  # [0, 2, 4, 6, 8]

# 创建随机数组
rand = np.random.randn(3, 3)  # 标准正态分布

嗯,这里要注意:np.array()和Python列表最大的区别是什么?数组要求所有元素类型一致。我曾经在项目中用列表存了混合类型的数据,结果跑模型时报错,排查了半天才发现是类型问题。

数组形状操作

方法作用示例
reshape改变形状arr.reshape(2, 5)
flatten展平为一维arr.flatten()
transpose转置arr.T
concatenate拼接np.concatenate([a, b])

我的小技巧:reshape时如果某个维度不确定,可以用-1占位。比如arr.reshape(-1, 4),NumPy会自动计算行数。这个在特征工程中特别实用。

向量化运算

这是NumPy最强大的特性。你想想看,如果用Python循环计算100万个数的平方,得等到什么时候?但NumPy一行搞定:

data = np.random.randn(1000000)
squared = data ** 2  # 向量化运算,瞬间完成

# 条件筛选
mask = data > 0
positive = data[mask]  # 布尔索引

避坑指南:我曾经在项目中直接用==比较两个浮点数数组,结果因为精度问题导致结果全错。浮点数比较要用np.isclose(),切记!

3.2 Pandas数据结构

Pandas是Python数据分析的瑞士军刀。我个人习惯,拿到任何数据第一步就是用Pandas读进来看看。它有两个核心数据结构:Series和DataFrame。

Series:一维数据

Series说白了就是带标签的一维数组。每个元素都有索引,你可以用位置访问,也可以用标签访问。

import pandas as pd

# 创建Series
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])

# 访问数据
print(s['b'])    # 20,用标签
print(s[1])      # 20,用位置

# 向量化操作
s2 = s * 2 + 1

DataFrame:二维表格

DataFrame是Pandas的核心。它就像一个Excel表格,有行索引和列名。我处理过的数据,90%以上都是用DataFrame来操作的。

# 从字典创建
data = {
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 28],
    '薪资': [15000, 20000, 18000]
}
df = pd.DataFrame(data)

# 查看数据
print(df.head())      # 前5行
print(df.info())      # 数据类型和缺失值
print(df.describe())  # 统计摘要

核心操作:

  • 选择列:df['年龄']df.年龄
  • 选择行:df.loc[0](标签)或 df.iloc[0](位置)
  • 条件筛选:df[df['年龄'] > 25]
  • 分组聚合:df.groupby('部门')['薪资'].mean()

3.3 数据读取与写入

实际项目中,数据很少直接写在代码里。都是从文件读进来的。我常用的几种格式:

CSV文件

# 读取
df = pd.read_csv('data.csv', encoding='utf-8')

# 写入
df.to_csv('output.csv', index=False)  # index=False 不保存行索引

经验之谈:读CSV时经常遇到编码问题。我一般先试utf-8,不行就换gbklatin1。另外,parse_dates参数可以自动解析日期列,省得后面再转换。

Excel文件

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

# 写入多个sheet
with pd.ExcelWriter('output.xlsx') as writer:
    df1.to_excel(writer, sheet_name='训练集')
    df2.to_excel(writer, sheet_name='测试集')

其他格式

格式读取写入适用场景
JSONpd.read_json()df.to_json()API数据
Parquetpd.read_parquet()df.to_parquet()大数据量,压缩率高
SQLpd.read_sql()df.to_sql()数据库交互

注意:读取大文件时,可以用chunksize参数分块读取。我曾经一次性读了个5GB的CSV,内存直接爆了。后来改成逐块处理,问题就解决了。

知识体系总览

下面这张图,是我梳理的本章知识脉络。你看一眼,心里就有谱了:

Python数据科学基础 NumPy数组操作 Pandas数据结构 数据读写 创建数组 形状操作 向量化运算 Series DataFrame 索引与筛选 CSV Excel JSON/SQL 数据处理 → 特征工程 → 模型训练

这张图把本章的核心内容串起来了。NumPy负责底层数值计算,Pandas负责数据组织和操作,文件读写负责数据进出。三者配合,就是数据科学的基本功。

我个人建议,初学者先把Pandas的DataFrame操作练熟。因为实际项目中,80%的时间都在和数据框打交道。NumPy的向量化运算也要掌握,这在特征工程中能省下大量时间。

专注资料整理