Series 与 DataFrame
这是什么:Pandas = Python 数据分析的头号库;Series 是一列数据,DataFrame 是一张表,本章先认这两块基石。
为什么用:学完 Python 基础,你已经会用列表和字典装数据了。可真要分析几百行的表格,列表和字典就力不从心,得有件趁手的兵器。
如何用:本章先用 pip install pandas 装好环境,再看看 Series 和 DataFrame 到底长什么样、各自能干嘛。
安装 pandas
打开命令行,输入:
pip install pandas
装完新建一个 demo.py,写入:
import pandas as pd
print(pd.__version__)
运行后看到版本号(比如 3.0.6),就说明装好了。
习惯约定:pandas 一律缩写成
pd,全世界的教程都这么写,别创新。版本说明:写作时最新版是 pandas 3.0.6,本教程基于 3.0。网上老教程多基于 2.x,部分默认行为(如字符串类型、副本规则)在 3.0 有变,遇到对不上时以本教程和官方文档为准。
Series:带标签的一列
Series 就是一列数据,而且每行自带编号(标签)。
import pandas as pd
s = pd.Series([95, 88, 76])
print(s)
0 95
1 88
2 76
dtype: int64
左边 0 1 2 是 pandas 自动加的索引,右边是你的数据。想自定义标签也行:pd.Series([95, 88, 76], index=["语文", "数学", "英语"])。
DataFrame:一张表
一列不够用?把几列拼起来就是 DataFrame——一张带行号和列名的表,感觉就像 Excel 里的工作表。
最常用的创建方式:用一个字典,键当列名,值当整列数据:
import pandas as pd
data = {
"姓名": ["小明", "小红", "小刚"],
"年龄": [18, 17, 19],
"成绩": [92, 88, 95],
}
df = pd.DataFrame(data)
print(df)
姓名 年龄 成绩
0 小明 18 92
1 小红 17 88
2 小刚 19 95
(不同终端里中英文混排的对齐可能略有差异,能看清就行,别纠结。)
拿到手先看三眼
拿到任何一份新数据,先别急着分析,用这三招"验货":
print(df.head()) # 看前 5 行,数据太长先扫一眼
print(df.shape) # 几行几列
df.info() # 每列的类型、有没有缺数据
姓名 年龄 成绩
0 小明 18 92
1 小红 17 88
2 小刚 19 95
(3, 3)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 姓名 3 non-null object
1 年龄 3 non-null int64
2 成绩 3 non-null int64
dtypes: int64(2), object(1)
memory usage: 200.0+ bytes
info() 重点看两处:每列的 Non-Null Count(非空数量,比总行数少就是有缺失值)和 Dtype(数据类型;文本列旧版显示 object,新版显示 str,一个意思)。
本章解读
| 代码 | 作用 |
|---|---|
pd.Series(列表) |
造一列带索引的数据 |
pd.DataFrame(字典) |
字典 → 一张表,键是列名 |
df.head() |
看前 5 行,head(3) 就是前 3 行 |
df.shape |
行数和列数,是个元组,如 (3, 3) |
df.info() |
行数、列类型、缺失情况一页看完 |
记忆口诀
Series 是一列,DataFrame 是一张表;字典变表格,head 看三眼。
动手改
- 给字典再加一列
"性别",重新print(df)看看效果 - 把
df.head()换成df.head(2),对比输出差别 - 故意把"年龄"列表少写一个数(只给 2 个值),看看 pandas 报什么错——报错读三遍,比看十遍教程记得牢
下一章:读取数据,把自己的 Excel / CSV 喂给 pandas 🐸