跳到主要内容Python 数据分析实战:Numpy 与 Pandas 核心应用详解 | 极客日志PythonAI算法
Python 数据分析实战:Numpy 与 Pandas 核心应用详解
本文详细介绍了 Python 数据分析中 Numpy 与 Pandas 库的核心用法。内容涵盖环境配置、Numpy 数组创建与向量化运算、Pandas 的 Series 与 DataFrame 数据结构、数据清洗流程(包括缺失值处理、类型转换、日期解析及异常值过滤)以及关键指标计算示例。文章通过医院销售数据的实际案例,演示了从数据读取到 KPI 分析的全流程,并补充了常见性能优化技巧与最佳实践,旨在帮助读者建立完整的数据分析工作流。
w7954712 浏览 Python 数据分析基础:Numpy 与 Pandas
在 Python 数据科学生态中,Numpy(Numerical Python)和 Pandas 是最核心的两个库。Numpy 专注于高效的数值计算和矩阵运算,其底层基于 C 语言实现,性能远高于原生列表;Pandas 则构建在 Numpy 之上,提供了更高级的数据结构(如 Series 和 DataFrame),专门用于处理结构化数据和进行复杂的数据分析任务。
一、环境准备与导入
使用前需确保已安装相关库。若未安装,可通过 pip 命令安装:
pip install numpy pandas openpyxl
import numpy as np
import pandas as pd
二、Numpy 核心功能
1. 数组创建与属性
Numpy 的核心对象是 ndarray(多维数组)。创建数组常用 array 函数,内部元素类型必须一致。
import numpy as np
arr1d = np.array([1, 2, 3, 4])
arr2d = np.array([[1, 2], [3, 4]])
print(f"维度:{arr2d.ndim}")
print(f"形状:{arr2d.shape}")
print(f"数据类型:{arr2d.dtype}")
2. 索引与切片
Numpy 支持类似列表的切片操作,但效率更高。注意索引从 0 开始。
val = arr2d[0, 1]
sub_arr = arr2d[:1, :]
3. 向量化运算
Numpy 的优势在于支持广播机制和向量化运算,无需循环即可对整体数组进行操作。
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)
print(a * 2)
三、Pandas 数据结构详解
Pandas 提供了两种主要数据结构:Series 和 DataFrame。
1. Series(一维带标签数组)
Series 由一组数据和对应的索引组成。索引可以是自定义的,不一定从 0 开始。
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s['a'])
2. DataFrame(表格型数据结构)
DataFrame 类似于 Excel 表格或 SQL 表,包含多列,每列可有不同的数据类型。
- 字典:Key 为列名,Value 为列表或 Series。
- 读取文件:Excel、CSV 等。
data = {
'姓名': ['张三', '李四'],
'年龄': [25, 30],
'城市': ['北京', '上海']
}
df = pd.DataFrame(data)
- 按列名访问:
df['姓名']
- 按位置访问:
df.iloc[0] 或 df.loc[0]
四、数据清洗实战
原始数据往往存在缺失值、格式错误等问题,清洗是分析前的关键步骤。
1. 读取数据
读取 Excel 文件时建议指定 dtype 防止类型推断错误,并安装 openpyxl 引擎。
file_path = 'data/sales_data.xlsx'
df = pd.read_excel(file_path, sheet_name='Sheet1', dtype=str)
2. 重命名与类型转换
df.rename(columns={'购药时间': '销售时间'}, inplace=True)
df['销售数量'] = pd.to_numeric(df['销售数量'], errors='coerce')
df['应收金额'] = pd.to_numeric(df['应收金额'], errors='coerce')
3. 处理缺失值
使用 dropna 删除缺失行,或使用 fillna 填充特定值。
df = df.dropna(subset=['销售时间', '社保卡号'], how='any')
df['实收金额'].fillna(0, inplace=True)
4. 日期处理
将字符串日期转换为 datetime 对象以便进行时间序列分析。
def extract_date(time_str):
if pd.isna(time_str):
return None
return time_str.split(' ')[0]
df['销售时间'] = df['销售时间'].apply(extract_date)
df['销售时间'] = pd.to_datetime(df['销售时间'], format='%Y-%m-%d', errors='coerce')
df = df.dropna(subset=['销售时间'])
5. 异常值处理
根据业务逻辑过滤不合理数据,例如销售数量不能为负数。
五、数据分析与指标计算
1. 去重与计数
kpi_df = df.drop_duplicates(subset=['销售时间', '社保卡号'])
total_orders = kpi_df.shape[0]
print(f'总消费次数:{total_orders}')
2. 金额统计
total_revenue = df['实收金额'].sum()
start_time = kpi_df['销售时间'].min()
end_time = kpi_df['销售时间'].max()
days_span = (end_time - start_time).days
months_span = max(days_span // 30, 1)
monthly_avg_orders = total_orders / months_span
monthly_avg_revenue = total_revenue / months_span
unit_price = total_revenue / total_orders
print(f'月份跨度:{months_span}个月')
print(f'月均消费次数:{monthly_avg_orders:.2f}')
print(f'月均消费金额:{monthly_avg_revenue:.2f}')
print(f'客单价:{unit_price:.2f}')
3. 分组聚合分析
利用 groupby 可以按不同维度(如月份、科室)汇总数据。
df['月份'] = df['销售时间'].dt.strftime('%Y-%m')
monthly_sales = df.groupby('月份')['实收金额'].sum().reset_index()
print(monthly_sales.head())
六、常见问题与最佳实践
- 内存优化:对于大型数据集,注意数据类型占用空间,可使用
category 类型存储重复字符串列。
- 链式赋值警告:修改 DataFrame 时尽量使用
.loc[] 或 .copy(),避免 SettingWithCopyWarning。
- 性能提升:尽量避免在循环中使用
iterrows(),优先使用向量化操作或 apply()。
- 保存结果:分析完成后,使用
to_excel 或 to_csv 导出结果。
df.to_excel('cleaned_sales_data.xlsx', index=False)
通过掌握 Numpy 的高效运算和 Pandas 的数据处理能力,可以大幅提升数据分析工作的效率与准确性。在实际项目中,结合具体业务场景灵活组合上述方法,能够解决绝大多数数据处理需求。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online