L3-数据处理及可视化
1. pandas库是什么?
Python的pandas库是数据分析领域不可或缺的工具,它提供了高效的数据结构和数据分析功能,使得处理和操作数据变得简单易行。
2. pandas库的安装与导入
在终端输入如下指令进行安装(如果是vscode按下 ctrl
+ ~
即可打开终端):
pip install pandas
在.py
文件开头导入:
import pandas as pd
3. pandas库中的数据结构
3.1 Series:类似一维数组,由一组数据和相应的索引组成
每个元素有一个唯一的索引(称为index),默认从0开始编号。
import pandas as pd
# 创建Series
s= pd.Series(['a','b','c','d','e']) #index=[0,1,2,3,4]
print(s)
也可以为每个元素重新设定唯一的索引(index):
import pandas as pd
# 创建Series
s= pd.Series(['a','b','c','d','e'], index=[1,2,3,4,5])
print(s)
3.2 DataFrame:类似二维表格,由多组数据和相应的索引值组成(由多个Series组成)
Series越多,列越多
Series中的数据越多,行越多
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({
'name':['Zhangsan','Lisi','Wangwu'],
'age':[18,26,35],
'occupation':['student','teacher','doctor']
})
print (df)
4. 查看与操作数据
4.1 查看数据
示例数据集:
import pandas as pd
data = {
"Name": ["Alice", "Bob", "Charlie", "David", "Eve", "Frank"],
"Age": [20, 21, 19, 22, 20, 21],
"Score": [85, 90, 78, 92, 88, 84],
"Grade": ["A", "A", "B", "A", "B", "B"],
"Passed": [True, True, True, True, True, False]
}
df = pd.DataFrame(data)
print("Original DataFrame:")
print(df)
1. df.head()
—— 查看前几行数据
默认显示前 5 行,可以传入参数 n
来指定行数。
print("\nFirst 3 rows:")
print(df.head(3)) # 只显示前 3 行
2. df.tail()
—— 查看后几行数据
默认显示后 5 行,可以传入参数 n
来指定行数。
print("\nLast 2 rows:")
print(df.tail(2)) # 只显示最后 2 行
3. df.info()
—— 显示 DataFrame 的基本信息
- 列名(Columns)
- 数据类型(Dtype)
- 非空值数量(Non-Null Count)
- 内存占用(Memory Usage)
print("\nDataFrame Info:")
print(df.info())
4. df.describe()
—— 显示数值列的统计信息
- 计数(count)
- 平均值(mean)
- 标准差(std)
- 最小值(min)
- 25%、50%、75% 分位数(percentiles)
- 最大值(max)
print("\nDescriptive Statistics:")
print(df.describe())
4.2 选择数据
1. 选择单列数据
使用方括号 []
选择单列:
print("\n选择 name 列:")
print(df['name'])
2. 选择多列数据
使用双括号 [[]]
选择多列:
print("\n选择 age 和 occupation 列:")
print(df[['age', 'occupation']])
3. 选择单行数据
使用 iloc
按索引位置选择行:
print("\n选择第 1 行数据:")
print(df.iloc[0])
4. 选择多行数据
使用 iloc
切片选择多行:
print("\n选择第 2-3 行数据:")
print(df.iloc[1:3])
5. 根据条件选择数据
使用布尔条件筛选数据:
print("\n选择年龄大于 30 的人员:")
print(df[df['age'] > 30])
4.3 添加与删除与更改数据
1. 添加列数据
直接对新列赋值即可添加列:
# 添加gender列
df['gender'] = ['male', 'female', 'male']
print("\n添加gender列后的数据集:")
print(df)
2. 添加行数据
使用loc
索引器添加新行:
# 添加第4行数据
df.loc[3] = ['Xiaoqi', 20, 'student', 'female']
print("\n添加行后的数据集:")
print(df)
3. 删除列数据
使用drop()
方法删除列:
# 删除gender列
df = df.drop('gender', axis=1)
print("\n删除gender列后的数据集:")
print(df)
4. 删除行数据
通过索引删除行:
# 删除索引为3的行
df = df.drop(3)
print("\n删除行后的数据集:")
print(df)
5. 修改数据
# 修改单个值
df.loc[1, 'age'] = 36
print("\n修改年龄后的数据集:")
print(df)
# 整列替换
df['occupation'] = ['undergraduate', 'professor', 'surgeon']
print("\n替换职业列后的数据集:")
print(df)
4.4 数据清洗
1. 处理重复数据
使用drop_duplicates()
删除完全重复的行:
# 删除重复行(保留第一条)
df_clean = df.drop_duplicates()
print("\n去重后的数据集:")
print(df_clean)
2. 处理缺失值
# 删除含有NaN的行
df_dropna = df.dropna()
print("\n删除缺失值后的数据集:")
print(df_dropna)
# 用0填充NaN
df_fillna = df.fillna(0)
print("\n填充缺失值后的数据集:")
print(df_fillna)
3. 处理异常值
修正超出合理范围的分数(0-100):
# 修正异常分数
score_cols = ['math', 'chinese', 'english']
df[score_cols] = df[score_cols].clip(0, 100)
print("\n修正异常值后的数据集:")
print(df)
4. 计算统计量
添加平均分和中位数列:
# 计算统计量
df['mean'] = df[['math', 'chinese', 'english']].mean(axis=1)
df['median'] = df[['math', 'chinese', 'english']].median(axis=1)
print("\n添加统计量后的数据集:")
print(df)
5. 数据类型转换
转换年龄列为整数类型:
# 安全转换数据类型
df['age'] = pd.to_numeric(df['age'], errors='coerce').astype('Int64')
print("\n转换数据类型后的数据集:")
print(df.dtypes)
6. 重置索引
清理后的索引重整:
# 重置索引(不保留旧索引)
df = df.reset_index(drop=True)
print("\n最终清洗后的数据集:")
print(df)
4.5 数据分析
1. 数据分组统计
# 按班级分组计算平均分
grouped_mean = grades_df.groupby('class')['score'].mean()
print("\n各班级平均分:")
print(grouped_mean)
# 按班级和学科分组计算统计量
grouped_multi = grades_df.groupby(['class', 'subject'])['score'].agg(['mean', 'max', 'count'])
print("\n班级-学科多维统计:")
print(grouped_multi)
2. 数据提取转换
# 提取用户名和域名
extract_result = email_df['email'].str.extract(r'(\w+)\.(\w+)@(\w+)\.(\w+)')
extract_result.columns = ['first_name', 'last_name', 'domain', 'suffix']
print("\n邮箱成分提取结果:")
print(extract_result)
# 提取数学成绩高于80的记录
high_math = grades_df[(grades_df['subject'] == 'math') & (grades_df['score'] > 80)]
print("\n高分数学成绩记录:")
print(high_math)
3. 数据合并连接
# 纵向合并
combined_df = pd.concat([grades_df, new_students], ignore_index=True)
print("\n合并后的数据集:")
print(combined_df.tail(3))
# 横向关联合并
merged_df = pd.merge(combined_df, info_df, on='class')
print("\n关联班级信息后的数据:")
print(merged_df.head(3))
5. 读取文件
1. 读取CSV文件
import pandas as pd
# 基础读取
df_csv = pd.read_csv('data.csv')
print("CSV数据前3行:")
print(df_csv.head(3))
# 带参数读取
df_csv_param = pd.read_csv(
'data.csv',
sep=',', # 分隔符
header=0, # 使用第一行作为列名
encoding='utf-8', # 编码格式
na_values=['NA'] # 自定义缺失值标识
)
2. 读取Excel文件
# 读取单个sheet
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print("\nExcel数据前3行:")
print(df_excel.head(3))
# 读取多个sheet
with pd.ExcelFile('data.xlsx') as xls:
df_sheet1 = pd.read_excel(xls, 'Sheet1')
df_sheet2 = pd.read_excel(xls, 'Sheet2')
# 读取所有sheet
excel_all = pd.read_excel('data.xlsx', sheet_name=None)
3. 读取JSON文件
# 标准JSON读取
df_json = pd.read_json('data.json')
print("\nJSON数据:")
print(df_json)
# 处理嵌套JSON
df_json_nested = pd.json_normalize(
pd.read_json('nested.json'),
record_path=['嵌套字段'],
meta=['元信息字段']
)
# JSON字符串解析
json_str = '{"name":"John", "age":30}'
df_from_str = pd.read_json(json_str, orient='index').T
4. 读取SQL数据库
from sqlalchemy import create_engine
# 创建数据库连接
engine = create_engine('sqlite:///example.db')
# 读取单表
df_sql = pd.read_sql('SELECT * FROM table_name', engine)
# 读取表结构信息
table_info = pd.read_sql_table('table_name', engine)
5. 读取HTML表格
# 读取网页表格
url = 'http://example.com/tables.html'
dfs_html = pd.read_html(url)
# 读取本地HTML
dfs_local = pd.read_html('table.html')
# 带参数解析
df_table = pd.read_html(
url,
attrs={'id': 'table1'}, # 指定表格属性
header=0, # 表头行
parse_dates=['日期列'] # 日期解析
)[0] # 返回列表中的第一个表格
总结
pandas是Python数据分析的核心库,提供高效的数据结构和数据处理功能,支持从数据读取、清洗、转换到分析的全流程操作。
核心功能:
数据结构创建
pd.Series()
- 创建一维数组结构pd.DataFrame()
- 创建二维表格结构
数据查看
head(n)
- 查看前n行数据tail(n)
- 查看后n行数据info()
- 显示数据基本信息(列名、类型、非空值等)describe()
- 显示数值列统计信息(计数、均值、标准差等)
数据选择
df['col']
- 选择单列df[['col1','col2']]
- 选择多列iloc[]
- 按位置索引选择行loc[]
- 按标签选择数据
数据操作
drop()
- 删除指定行或列fillna()
- 填充缺失值dropna()
- 删除缺失值drop_duplicates()
- 删除重复行clip()
- 限制数值范围astype()
- 转换数据类型reset_index()
- 重置索引
数据分析
groupby()
- 数据分组mean()
- 计算平均值max()
- 计算最大值min()
- 计算最小值count()
- 计数agg()
- 多函数聚合计算
文件读写
read_csv()
- 读取CSV文件read_excel()
- 读取Excel文件read_json()
- 读取JSON文件read_sql()
- 读取SQL数据库read_html()
- 读取HTML表格
数据合并
concat()
- 数据纵向合并merge()
- 数据横向关联合并