Python本地数据处理实战:Pandas与NumPy核心用法解析

Luna
Luna
发布时间:2026-10-13| 2人浏览过
原创

本文介绍如何在本地环境中使用Python高效处理大数据。重点讲解Pandas中Series、DataFrame的初始化、行列增删、数据合并(concat、merge)及分组聚合(GroupBy)操作,并简述NumPy数组基础。涵盖从CSV读取、结构更新到条件过滤的完整流程,适合需要在本地快速处理亿级数据聚合的场景。

虽然大数据处理通常依赖云端资源,但云服务不仅产生费用,数据上传下载的耗时也较为繁琐。因此,掌握在本地电脑上快速处理数据的技能显得尤为重要。

pandas

这是我在竞赛中掌握的一个关键工具,能够在本地对亿级别的数据执行聚合等操作。其内部数据结构主要包括: • Series:一维数组,每个元素均带有标签 • DataFrame:二维表格,可视为Series的集合 • Panel:三维数据结构

数据的初始化

我们可以通过构造函数进行初始化,参考以下代码即可直观了解数据形态:

from pandas import Series, DataFrame

s = Series(data=[1, 2, 3], index=['a', 'b', 'c'])

df = DataFrame(
  data=[
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
  ],
  index=['i1', 'i2', 'i3'],
  columns=['c1', 'c2', 'c3']
)

若源数据格式规范的CSV文件(或自行生成的中间数据),可直接读取: df = pandas.read_csv("../volume.csv", header=0)

数据的更新

更新结构

定义完成后,可对行和列进行增减操作(即增减数据或修改结构): • 增加列: • df.insert(3, 'new_column', [4, 7, 10]) • df['c4'] = [4, 7, 10]

• 删除列 • df.pop('c1') • df = df.drop('c1', axis=1)

• 增加行:通常不建议动态增加行,因为性能可能不佳 • df.loc['i4'] = [10, 11, 12] • df.loc['i4'] = {'c1': 10, 'c2': 11, 'c3': 12}

• 删除行: • df = df.drop('i1', axis=0)

更新数据

我们可以精确修改单个位置的值: • df['c1']['i1'] = 77 • df.ix[1, 2] = 66

合并数据

数据往往分散在不同的DataFrame中,使用时需进行合并。第一种方式是concat(基础方法):

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
          'B': ['B0', 'B1', 'B2', 'B3'],
          'C': ['C0', 'C1', 'C2', 'C3'],
          'D': ['D0', 'D1', 'D2', 'D3']},
          index=[0, 1, 2, 3])

df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
          'B': ['B4', 'B5', 'B6', 'B7'],
          'C': ['C4', 'C5', 'C6', 'C7'],
          'D': ['D4', 'D5', 'D6', 'D7']},
          index=[4, 5, 6, 7])

result = pd.concat([df1, df2])

合并后的结果如下:

  A  B  C  D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7

其参数含义如下: • objs :待合并的数据(Series、DataFrame) • axis :合并轴方向,行(0)、列(1) • join :关联类型(inner、outer) • join_axes :结果行索引,例如:pd.concat([df1, df2], axis=1, join_axes=[pd.Int64Index([1, 2, 3])]) • ignore_index :是否忽略传入objs中的索引 • keys :来自不同表的索引标识,每个表一个(当ignore_index=True时此参数无效) • levels :不同层次的索引 • names :不同层次索引的名称 • verify_integrity :检查是否包含重复项(有一定性能开销) • copy :是否复制数据

另一个相对简化的操作是append(简化版,功能似乎并无特别之处): result = df1.append(df2)

接下来重点介绍merge方法(用于融合两个表的数据):

import pandas as pd

left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
           'A': ['A0', 'A1', 'A2', 'A3'],
           'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
           'C': ['C0', 'C1', 'C2', 'C3'],
           'D': ['D0', 'D1', 'D2', 'D3']})

result = pd.merge(left, right, on='key')

print(result)

结果如下(请注意观察与concat的区别):

  A  B key  C  D
0 A0 B0 K0 C0 D0
1 A1 B1 K1 C1 D1
2 A2 B2 K2 C2 D2
3 A3 B3 K3 C3 D3

该方法的参数包括: • left、right :待关联的两个表 • how :关联方式(left、right、inner、outer) • on :用于关联的列,若不指定则寻找相同列名 • left_on、right_on :分别指定left、right表的关联列,在列名不同时使用 • left_index、right_index :是否使用索引进行关联 • sort :排序 • suffixes :后缀 • copy :是否复制数据

对应的简化版本为join方法:

import pandas as pd

left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
           'B': ['B0', 'B1', 'B2', 'B3']},
          index=['K0', 'K1', 'K2', 'K3'])

right = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
           'D': ['D0', 'D1', 'D2', 'D3']},
           index=['K0', 'K1', 'K2', 'K3'])

result = left.join(right)

print(result)

输出结果为:

   A  B  C  D
K0 A0 B0 C0 D0
K1 A1 B1 C1 D1
K2 A2 B2 C2 D2
K3 A3 B3 C3 D3

数据的查询和分析

基本查询

精确查看单个位置数据的方法: • df['c1']['i1'] • df.loc['i1']['c1'] (先行后列) • df.iloc[1] (下标操作) • df.ix['i1'][1] 或 df.ix[0, 2] (混合使用下标或名称)

通过切片操作批量取出数据: • df.loc['i1':'i2', ['c1', 'c2']] • df.iloc[1:3, [1, 2]] • df.ix[1:3, 0:2]

查看某行或某列: • 行: df.loc['i1'] • 列: df['c1']

分组

分组(GroupBy)是最基本的分析手段,参考以下示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
          'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
          'C': np.random.randn(8),
          'D': np.random.randn(8)})

result = df.groupby(['A'])

print(result.get_group('foo'))

其他分组形式: • df.groupby('A') • df.groupby(['A', 'B']) • df.groupby(group_func, axis=1) • df.groupby(level=0) • df.groupby([pd.Grouper(level=0), 'A'])

可以对各组进行遍历:

for name, group in result:
  print(name)
  print(group)

对分组的结果可以执行过滤:

df.groupby('A').B.filter(lambda x : len(x) > 1)

进一步对各个分组进行计算(结果较为直观,此处省略): • df.groupby(['A', 'B']).sum() • df.groupby(['A', 'B']).sum().reset_index() • df.groupby(['A', 'B']).aggregate(np.sum) • df.groupby(['A', 'B']).agg(np.sum) • df.groupby(['A', 'B']).agg([np.sum, np.mean]) • df.groupby(['A', 'B']).agg([np.sum, np.mean]).rename(columns={'sum': 's', 'mean': 'm'}) • df.groupby(['A', 'B']).agg({'C': np.sum, 'D': np.mean}) • df.groupby(['A', 'B']).agg({'C': 'sum', 'D': 'mean'})

利用transform(类似的还有apply)可以对各个分组分别计算:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={
  'A': [1, 1, 3],
  'B': [4, 5, 6],
  'C': [7, np.nan, 9]})

print(df.groupby('A')['B'].transform(lambda x : x - x.mean()))

输出结果为:

0  -0.5
1  0.5
2  0.0
Name: B, dtype: float64

类似地,可以在分组上使用窗口函数: • rolling • resample • expanding

条件过滤

使用一些常用的构造方式,可以达到类似SQL的开发效率: • tips[tips['time'] == 'Dinner'].head(5) • tips[(tips['time'] == 'Dinner') & (tips['tip'] > 5.00)] • tips[(tips['size'] >= 5) | (tips['total_bill'] > 45)] • frame[frame['col2'].isnull()] • frame[frame['col1'].notnull()]

最后,若想在PyCharm中进行图形化展示,需要调用 plt.show()(其他IDE的情况尚不明确)。

numpy

较早接触的numpy,总体来看处理数据比内置类型更为便捷: • np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]]) • np.array((5, 6, 7, 8))

其应用主要集中在数组和矩阵的处理上,这也是许多其他工具的基础。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。