一套命名规律:read_xxx / to_xxx
Pandas 提供了一套 API,可以方便地读取和写入各类数据文件(csv、Excel、数据库、网络数据等):
| 方向 | 方法 | 例子 |
|---|---|---|
| 读取 | read_xxx | pd.read_csv()、pd.read_excel() |
| 写入 | to_xxx | df.to_csv()、df.to_excel() |
流程上的位置:读取 → 清洗处理 → 分析 → 写出。
读取 + 计算 + 写出的完整例子
python
import pandas as pd
# 读取数据 --> read_csv
df = pd.read_csv('data/sales.csv', usecols=['订单号', '产品类别', '产品名称', '销售数量', '单价'])
# 数据处理:新增一列(销售金额 = 销售数量 × 单价)
df['销售金额'] = df['销售数量'] * df['单价']
# 写入数据 --> to_csv;index=False 表示不写入索引列
df.to_csv('data/sales_01.csv', index=False)read_csv 常用参数
| 参数 | 作用 |
|---|---|
usecols=['列1', '列2'] | 只读取需要的列 |
index_col='订单号' | 指定某一列作为行索引 |
nrows=10 | 只读前 n 行(试读大文件时好用) |
dtype={'年份': 'Int64'} | 指定某列的读取类型(Int64 支持空值) |
to_csv 常用参数
| 参数 | 作用 |
|---|---|
index=False | 不写入索引列(最常用,否则文件里会多出一列行号) |
encoding='utf-8' | 指定编码 |
TIP
df['新列名'] = 表达式 是 Pandas 里新增列的标准写法:右边是整列的运算(df['销售数量'] * df['单价'] 会把每一行对应相乘),不需要写循环。
相关
练习题
一、知识回顾(读完直接做下面的实践题)
- 读取数据的方法是
read_xxx,写入是to_xxx(如to_csv) - 读 CSV:
pd.read_csv('data/sales.csv');只读需要的列用参数usecols - 指定某列当行索引用参数
index_col;只读前 n 行用参数nrows - 新增一列"销售金额":
df['销售金额'] = df['销售数量'] * df['单价'] - 写出 CSV:
df.to_csv('data/sales_01.csv', index=False) index=False的作用是不把索引列写进文件(否则会多出一列行号)
二、裸写题
- 提示(先自己想,实在想不出再点开)
一级 · 思路:读文件时就把不需要的列过滤掉,省内存 二级 · 方法:
pd.read_csv(路径, usecols=[...])三级 · 骨架:df.____(5)看前 5 行- 参考答案(做完再点开)
python# 2-1 import pandas as pd df = pd.read_csv('data/sales.csv', usecols=['订单号', '产品类别', '销售数量', '单价']) print(df.head(5))- 提示(先自己想,实在想不出再点开)
一级 · 思路:新增列 → 写出 二级 · 方法:
df['销售金额'] = df['销售数量'] * df['单价']/df.to_csv(..., index=False)三级 · 骨架:右边是整列相乘,不用写循环- 参考答案(做完再点开)
python# 2-2 df['销售金额'] = df['销售数量'] * df['单价'] df.to_csv('sales_out.csv', index=False) print(df.head(3))- 提示(先自己想,实在想不出再点开)
一级 · 思路:读的时候直接指定索引列 二级 · 方法:
pd.read_csv(路径, index_col='订单号')三级 · 骨架:print(df.index[:3].tolist())- 参考答案(做完再点开)
python# 2-3 import pandas as pd df2 = pd.read_csv('data/sales.csv', index_col='订单号') print(df2.index[:3].tolist())
