一、数据导入(/ 导出)
通过各个渠道汇总的符合研究范畴的数据,通常整合到 Excel 中。此时对于 Python 层面的操作来说,需要将 Excel 导入以便后续使用编程手法处理数据。
1. .csv 文件
.csv 文件是表格的一种存储形式,在 Excel 或 WPS - Excel 中以表格形式展示,但实际上它是'纯文本'文件,不依赖于 Excel 环境,用记事本、编译器都能直接打开。类比我们常见的'表格',它本质上是每行不同单元格中的数值用','分隔后存储的,也就是每行是一条'记录',每列是一个'字段'且用','分隔。
一般格式:
姓名,年龄,城市,薪资
张三,25,北京,8000.5
李四,30,上海,10000.0
王五,28,广州,9500.8
优点:
- **体积小:**没有格式、图片、宏,文件比 Excel 小很多。具备轻量、打开快、传输方便的特点;
- **通用性极强:**几乎所有编程语言、数据库、表格软件都支持。便于程序读写(Python、Java、SQL 等都很友好)。
缺点:
- 只存数据,不保存格式(字体、颜色、公式、宏);
- 不能有复杂结构:不支持多工作表、合并单元格;
- 字符、编码问题:中文容易乱码,需注意用 UTF-8 等编码;
- 数据里有逗号 / 换行时,需要用引号包裹,处理稍麻烦。
**格式转换:**文件 → 另存为 → CSV (逗号分隔)(*.csv) → 保存


文件读取:变量名 = 库名.read_csv("文件路径")
文件导出:变量名.to_csv("存储路径")(导出为 .csv 文件,也可以导出为其它的文件格式)

2. .json 文件
.json 文件是一种'纯文本'文件,其存储独立于编程语言的轻量级数据交换格式,用来结构化地存储和传输数据。常用于前后端交互、配置文件、数据备份等场景。
一般格式:
{
"user": {
"basic_info": {
"name": "张三",
"id_card": "110101199901011234"
},
"contact": {
"phone": "13800138000",
"addresses": [
{"type": "家庭", "city": "北京", "detail": "海淀区 XX 小区"},
{"type": "公司", "city": "上海", "detail": "浦东新区 XX 大厦"}
]
}
},
"order_history": [
{
"order_id": "ORD20240302001",
"amount": 599,
"create_time": "2024-03-02 10:30:00",
"items": ["键盘", "鼠标"]
}
]
}
特点:
- **纯文本、易读易写:**由键值对、数组、基本数据类型构成,语法简洁,兼具可读与可编写的特性;
- **语言无关性:**大多数编译软件都配备了读取 .json 文件的模块,如:Python 的 json 模块(json.load() 读文件、json.dump() 写文件)、JavaScript(JSON.parse() 解析字符串、JSON.stringify() 生成字符串);
- **数据类型范畴有限:**仅支持几种基础数据类型(字符串、数字、布尔值、数组、字典、空值),保证了格式的统一,避免歧义;
- **轻量级、传输高效:**语法简洁,无须闭合标签,文件体积小,在网络传输中效率更高,一般在接口返回数据中优先使用 .json 文件;
- 具有严格的语法规则:'键'必须用双引号包裹,末尾不能有多余的逗号,不支持注释。
文件读取:变量名 = 库名.read_json("文件路径")
文件导出:变量名.to_json("存储路径")(导出为 .json 文件,也可以导出为其它的文件格式)
二、数据清洗
1. 缺失值处理
· Python 中的 None · Numpy 中的 nan · Pandas 中的 NA
(1) 检查是否含有缺失值:
· 对象.isna()
· 对象.isnull()
(2) 去除缺失值:
· 对象.dropna() :
· axis = 0(默认,按行检查),axis = 1(按列检查);
· how = "any"(默认,只要出现一个缺失值,就删除该行 / 列),how = "all"(该行 / 列中所有数值都为缺失值时,删除该行 / 列);
· thresh = 几,即'在一行记录中,有'几'个数值不为缺失值时,保留该行 / 列数据';
· subset = [行 / 列索引],即'索引所在的行 / 列中某列 / 行有缺失值,则该行 / 列数据被删除'。
(3) 检查所含缺失值的数量:
· 对象.isna().sum()
· 对象.isnull().sum()
**(4) 填充缺失值:**当缺失值数量在总数值量中占比较小的话,可以选择填充缺失值。
A. 固定值填充:对象.fillna({行 / 列索引 1:数值 1, 行 / 列索引 2:数值 2, …… , 行 / 列索引 n:数值 n});
B. 统计值填充(一般用均值填充,合理的情况下也可以用其他的):对象.fillna([[行 / 列索引]].mean());
C. 用缺失值前面的相邻数值填充:对象.ffill();
D. 用缺失值后面的相邻数值填充:对象.bfill()。
2. 重复值处理
· 检查是否有重复值:对象.duplicated()
· 去除重复值:对象.drop_duplicates()
补充:
A. 默认一整行(axis = 0)/ 列(axis = 1)的数值都相同的两行 / 列为'重复';
B. 如果想按照某一行 / 列的重复值去重,设置 subset = [行 / 列索引];
C. 如果想保留最新出现的'记录',设置 keep = "last"。
3. 数据类型转换
· 对象.dtypes:查看数据类型
· 对象名 [行 / 列索引] = 对象名 [行 / 列索引].astype("数据类型"):对没必要(存储空间过大)/ 错误(不符合将要进行的操作,如字符串类型不能进行数值计算)的数据类型进行转换
| 数据类型 | 说明 |
|---|---|
| int32 | 整数类型(32 位) |
| int64 | 整数类型(64 位) |
| float64 | 浮点数类型(64 位) |
| object | 对象类型(字符串 / 混合类型) |

