【Pandas】基础命令
0. 地址:
菜鸟教程:https://www.runoob.com/pandas/pandas-install.html
官网地址:https://pandas.pydata.org/
1. 什么是Pandas?
Pandas 是基于Numpy构建的,专门进行表格数据处理的工具库
2. Pandas的核心数据结构
Series:一维带标签数组
DataFrame:二维表格型数据结构
3. Pandas的主要功能
数据清洗和准备
数据整理和转换
数据分析和建模
数据可视化
4. Pandas的环境准备
# 使用 pip 安装
pip install pandas
# 使用 conda 安装
conda install pandas
# 导入pandas
import pandas as pd # 惯例缩写为 pd
5. Pandas 核心数据结构
(1)Series:一维带标签数组
-
从列表创建Series时,索引默认为0~n
-
从字典创建Series时,索引值为key
-
创建Series时,指定索引用index。必须保证index的长度与Series列数保持一致。
-
Series会默认转换数据类型
- 当 np.nan存在时,
[1, 3, 5, num, 6, 8],自动转换为 float64 - 当 字母 存在时,
[1, 3, 5, 'aa', 6, 8],自动转换为 object - 当全是整数时,自动转换为 int64
- 当 np.nan存在时,
import pandas as pd
import numpy as np
# 从列表创建Series
s1 = pd.Series([1, 3, 5, np.nan, 6, 8])
print("从列表创建的Series:")
print(s1)
# 从字典创建Series
s2 = pd.Series({'a': 1, 'b': 2, 'c': 3})
print("\n从字典创建的Series:")
print(s2)
# 指定索引
s3 = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print("\n指定索引的Series:")
print(s3)
# Series操作
print("\nSeries操作:")
print("值:", s3.values)
print("索引:", s3.index)
(2)DataFrame:二维表格数据结构
-
创建二维表格的两种方式:
- 从字典中创建,字典中的key值 默认为表头,index 默认依旧是0~n
- 从列表中创建,需要用columns指定表头,否则表头和index均为0~n
- df.dtypes:默认返回列数据的数据类型。
import pandas as pd
import numpy as np
# 从字典创建DataFrame
data = {
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [25, 30, 35, 28],
'城市': ['北京', '上海', '广州', '深圳'],
'工资': [5000, 7000, 6000, 8000]
}
df = pd.DataFrame(data)
print("创建的DataFrame:")
print(df)
# 从列表创建DataFrame
data_list = [
['张三', 25, '北京', 5000],
['李四', 30, '上海', 7000],
['王五', 35, '广州', 6000],
['赵六', 28, '深圳', 8000]
]
df2 = pd.DataFrame(data_list, columns=['姓名', '年龄', '城市', '工资'])
print("\n从列表创建的DataFrame:")
print(df2)
# 查看DataFrame基本信息
print("\nDataFrame基本信息:")
print("形状:", df.shape)
print("列名:", df.columns)
print("索引:", df.index)
print("数据类型:\n", df.dtypes)
6. DataFrame 基本操作
(1)数据查看和选择
-
head():查看前几行(默认前 5 行,括号写数字 = 看几行)
-
tail():查看后几行(默认后 5 行,括号写数字 = 看几行)
-
describe():快速生成数值列统计(总数、均值、标准差、最大 / 最小值)
-
列选择(列属性):选取一列或多列数据 →
df["列名"]/df[["列1","列2"]] -
loc():标签选择(位置索引)
-
loc:选取一列或多列数据 →
df["列名"]/df[["列1","列2"]] -
iloc:按数字位置选 →
df.iloc[行号, 列号]-
单行单列:df.iloc[0,1] # 第1行第2列
-
多行单列:df.iloc[[0,2], 1] # 第1、3行,第2列
-
单行多列:df.iloc[1, [0,2]] # 第2行,第1、3列
-
行列切片:起始:结束(左闭右开)
- df.iloc[0:2, 1:] # 前2行,第2列往后所有列
- df.iloc[:, 0] # 全部行,第1列
- df.iloc[1:, :] # 第2行往后全部行,所有列
-
-
import pandas as pd
import numpy as np
# 创建示例DataFrame
data_list = [
['张三', 25, '北京', 5000],
['李四', 30, '上海', 7000],
['王五', 35, '广州', 6000],
['赵六', 28, '深圳', 8000]
]
df = pd.DataFrame(data_list, columns=['姓名', '年龄', '城市', '工资'], index=["s1", "s2", "s3", "s4"])
print("\n从列表创建的DataFrame:")
print(df)
# 查看数据
print("\n前3行:")
print(df.head(3))
print("\n后2行:")
print(df.tail(2))
print("\n描述性统计:")
print(df.describe())
# 选择数据
print("\n选择单列:")
print(df['姓名'])
print("\n选择多列:")
print(df[['姓名', '年龄']])
print("\n使用loc选择(标签索引):")
print(df.loc['s1']) # 选择一行
print(df.loc[['s1', 's3']]) # 选择多行
print(df.loc['s1':'s3']) # 切片选择
print("\n使用iloc选择(位置索引):")
print(df.iloc[0]) # 第一行
print(df.iloc[[0, 2]]) # 选择多行
print(df.iloc[0:3]) # 切片选择
(2)数据筛选和过滤
- df[df['年龄'] > 30]:用布尔序列筛选,只保留条件为 True 的整行数据
- df['年龄'] > 30:返回布尔序列,每行标记 True/False,仅判断不筛选
- query(): 字符串表达式筛选,可以用“and”,“or”
- sort_values():排序,默认ascending=False 降序;ascending=True 升序
import pandas as pd
import numpy as np
# 创建示例数据
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
'年龄': [25, 30, 35, 28, 32],
'部门': ['技术部', '销售部', '技术部', '人事部', '销售部'],
'工资': [5000, 7000, 6000, 5500, 7500]
})
print("原始数据:")
print(df)
# 条件筛选
print("\n年龄大于30的员工:")
print(df[df['年龄'] > 30])
print("\n技术部的员工:")
print(df[df['部门'] == '技术部'])
print("\n使用query方法筛选:")
print(df.query('年龄 > 28 and 工资 < 7000'))
# 排序
print("\n按工资降序排序:")
print(df.sort_values('工资', ascending=False))
print("\n按多列排序(部门升序,工资降序):")
print(df.sort_values(['部门', '工资'], ascending=[True, False]))
(3)缺省值处理
- isnull():判断是否为空,空返回 True
- notnull():判断是否非空,非空返回 True
- dropna():删除包含空值的整行
- dropna(how='all'):仅删除整行全部为空的数据
- fillna(0):空值统一填充为 0
- fillna(df.mean()):数值列空值填充对应列平均值
# -- 元数据
A,B,C
1.0,5.0,9
2.0,,10
,,11
4.0,8.0,12
,,
# ---------------------------------------------
import pandas as pd
import numpy as np
# 读取包含缺失值的数据
df = pd.read_csv("清洗数据.csv", sep=",")
print("原始数据(包含缺失值):")
print(df)
# 检查缺失值
print("\n缺失值统计:")
print(df.isnull().sum())
print("\n非缺失值统计:")
print(df.notnull().sum())
# 删除缺失值
print("\n删除包含缺失值的行:")
print(df.dropna())
print("\n删除全部为缺失值的列:")
print(df.dropna(how='all'))
# 填充缺失值
print("\n用指定值填充缺失值:")
print(df.fillna(0))
print("\n用均值填充:")
print(df.fillna(df.mean()))
(4)数据转换
-
groupby():单维度分组计算(一维表)
-
agg():聚合统计;例如:agg(['mean','count']
- mean:平均值
- sum:求和
- max:最大值
- min:最小值
- count:计数
- std:标准差
-
-
pivot_table():Python 版 Excel 透视表,行 + 列双维度汇总
# -- 元数据
产品,销售额,地区
A,100,北京
B,200,上海
C,150,广州
A,300,北京
B,250,上海
C,180,广州
# ---------------------------------------------
import pandas as pd
# 创建示例数据
df = pd.read_csv("分组聚合数据.csv", sep=",")
print("原始数据:")
print(df)
# 分组聚合
print("\n按产品分组计算总销售额:")
print(df.groupby('产品')['销售额'].sum())
print("\n按产品和地区分组计算统计量:")
print(df.groupby(['产品', '地区'])['销售额'].agg(['sum', 'mean']))
# 数据透视表
print("\n数据透视表:")
pivot_df = df.pivot_table(index='产品', values="销售额", aggfunc='sum')
print(pivot_df)
print("\n数据透视表:")
pivot_df = df.pivot_table(index=['产品', '地区'], values="销售额", aggfunc=['sum', 'mean'])
print(pivot_df)

浙公网安备 33010602011771号