3、数据获取基础:认识CSV、JSON、Excel等常见数据格式,使用Pandas读取本地文件
做数据可视化,第一步不是画图,而是把数据搞到手。
我见过不少新手,一上来就急着调matplotlib,结果数据读进来全是乱码,或者格式不对,折腾半天才发现是文件编码的问题。嗯,这种坑我自己也踩过不止一次。
今天我们就来聊聊,情绪数据最常见的几种存储格式,以及怎么用Pandas把它们乖乖读进Python里。
3.1 三种最常见的文件格式
情绪数据通常来自问卷、传感器、日志或者社交媒体。不同来源,格式也不同。我个人习惯先把数据摸清楚,再动手写代码。
CSV(逗号分隔值)
CSV 是最常见的格式,说白了就是一个纯文本表格。每一行是一条记录,每一列用逗号隔开。Excel 可以直接打开,记事本也能看。
举个例子,一份情绪调查数据可能是这样的:
user_id,emotion,score,timestamp
1001,happy,8.5,2024-01-15 10:30:00
1002,sad,3.2,2024-01-15 10:31:00
1003,angry,2.1,2024-01-15 10:32:00
优点:轻量、通用、几乎任何工具都能处理。
缺点:没有数据类型定义,所有字段都是字符串,需要自己转换。
JSON(JavaScript对象表示法)
JSON 是结构化数据的王者。它用键值对的方式组织数据,特别适合嵌套结构。比如一条情绪记录可能包含多个维度的信息:
{
"user_id": 1001,
"emotion": "happy",
"score": 8.5,
"timestamp": "2024-01-15T10:30:00",
"details": {
"heart_rate": 72,
"sleep_hours": 7.5,
"notes": "今天心情不错"
}
}
我在项目中遇到过,有些传感器数据直接输出 JSON 格式,一条记录里嵌套了十几个字段。用 Pandas 读取时,需要把嵌套结构展开,不然就是一坨乱麻。
Excel(.xlsx)
Excel 文件大家最熟悉。它支持多工作表、公式、颜色、合并单元格等花里胡哨的功能。但说实话,做数据分析时,这些花哨功能反而是麻烦。
3.2 用Pandas读取本地文件
Pandas 是 Python 数据分析的瑞士军刀。读取文件就三行代码的事,但细节决定成败。
读取CSV
import pandas as pd
# 最基础的读取
df = pd.read_csv('emotion_data.csv')
# 如果文件有中文,指定编码
df = pd.read_csv('emotion_data.csv', encoding='utf-8')
# 如果分隔符是制表符
df = pd.read_csv('emotion_data.tsv', sep='\t')
# 只看前5行,快速预览
df = pd.read_csv('emotion_data.csv', nrows=5)
你想想看,为什么有时候读出来全是乱码?因为文件保存时用的是 GBK 编码,而你用 UTF-8 去读。解决办法就是指定正确的编码参数。
读取JSON
# 读取标准JSON
df = pd.read_json('emotion_data.json')
# 如果JSON是嵌套的,需要指定路径
df = pd.read_json('emotion_data.json', orient='records')
# 处理嵌套字段,用json_normalize展开
from pandas import json_normalize
import json
with open('emotion_data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
df = json_normalize(data)
这里要注意,json_normalize 会把嵌套的键用点号连接起来,比如 details.heart_rate。这样展开后,每个字段都变成一列,方便后续分析。
读取Excel
# 读取第一个工作表
df = pd.read_excel('emotion_data.xlsx')
# 指定工作表名称
df = pd.read_excel('emotion_data.xlsx', sheet_name='Sheet1')
# 跳过前两行(有些Excel文件有标题行)
df = pd.read_excel('emotion_data.xlsx', skiprows=2)
# 只读取特定列
df = pd.read_excel('emotion_data.xlsx', usecols=['user_id', 'emotion', 'score'])
3.3 数据读取后的第一件事
文件读进来了,别急着分析。先做三件事:
- 看形状:
df.shape看看多少行多少列 - 看字段:
df.columns看看有哪些列 - 看数据类型:
df.dtypes看看每列是不是你想要的类型
我曾经接手过一个项目,读进来发现“score”列是字符串类型,因为原始数据里混了一个“N/A”。如果不检查类型,后面做数学运算直接报错。
3.4 知识体系一览
下面这张图,帮你理清本章的核心逻辑:
3.5 避坑指南
最后,分享几个我踩过的坑,你遇到了能少走弯路:
- 文件路径别用中文:Windows 下中文路径经常出幺蛾子,建议项目目录全英文。
- 大文件别一次性读:如果 CSV 文件超过 1GB,用
chunksize参数分块读取,不然内存直接爆掉。 - Excel 里的日期格式:Pandas 读 Excel 日期时,有时候会变成数字(比如 44205 代表 2021-01-01)。用
parse_dates参数指定列名,让它自动转换。 - JSON 文件太大怎么办:用
pd.read_json()的lines=True参数,按行读取 JSON 文件,每行一个 JSON 对象。这种格式叫 JSON Lines,处理大数据时很实用。
公众号:蓝海资料掘金营,微信deep3321