Pandas 是一个开源的 Python 库,由 Wes McKinney 开发,专门用于高效地处理和分析数据,无论是小规模的数据实验还是大规模的数据处理任务。它构建在 NumPy 之上,这意味着它利用了 NumPy 的高性能数组计算能力。Pandas 的核心数据结构有两个:Series 和 DataFrame,它们是进行数据操作的基础。
1. Series
- 定义: Series 是一个一维的数据结构,可以看作是带有标签的数组。它能够存储任何数据类型(整数、字符串、浮点数等),并且每个元素都有一个对应的索引。
- 应用场景: Series 适合于处理一维数据,比如列表或字典类型的数据。它可以用来存储股票价格、温度记录等单一变量的数据系列。
2. DataFrame
- 定义: DataFrame 是一个二维的数据结构,相当于一个表格,包含有一列或多列 Series。每一列可以是不同的数据类型,列有其对应的列名,行也有自己的索引。
- 应用场景: DataFrame 是 Pandas 最重要的数据结构,适用于处理多维度数据,如电子表格或SQL数据库中的表格数据。它非常适合于处理和分析具有不同特征的数据集,如统计学分析、金融数据处理、机器学习的数据预处理等。
主要功能与操作
- 数据读写 : Pandas 提供了
read_csv
,read_excel
,to_csv
,to_excel
等函数,方便读写各种格式的文件。 - 数据清洗 : 包括缺失值处理(如使用
dropna
,fillna
函数),数据类型转换(使用astype
函数),数据重命名(使用rename
函数)等。 - 数据选择与过滤: 使用布尔索引、条件表达式、标签选取等方式从数据集中提取所需的数据子集。
- 数据聚合与分组 : 利用
groupby
函数进行数据分组,并配合agg
,apply
等方法进行聚合运算,如求和、平均、最大值等。 - 数据合并与重塑 : 可以通过
concat
,merge
,join
进行数据集的合并;使用pivot
,melt
等函数进行数据重塑,以适应不同的分析需求。 - 时间序列处理: Pandas 支持强大且灵活的时间序列功能,包括日期时间数据的解析、重采样、移动窗口统计等。
- 数据可视化: 虽然 Pandas 本身不直接提供图形绘制功能,但它与 Matplotlib、Seaborn 等库无缝集成,使得数据可视化变得简单。
Pandas 提供了一套完整的工具集,使得数据清洗、准备、分析和可视化工作变得更加高效。它不仅在学术研究中被广泛应用,在数据科学、金融分析、市场研究、Web开发等领域也极为重要。掌握 Pandas,可以极大提高数据分析的效率和质量。
以下代码简单的实现了EXCEL中数据的按地市汇总,并且可以再按专业汇总
import pandas as pd
def generate_detail_and_summary_per_city(input_file_path, output_folder="c:\city_summaries"):
# 加载Excel文件
df = pd.read_excel(input_file_path)
# 获取唯一地市列表
cities = df['地市'].unique()
# 确保输出文件夹存在
import os
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for city in cities:
# 为当前地市筛选数据
city_df = df[df['地市'] == city]
# 计算当前地市的总和
city_total_sum = city_df['实付'].sum()
# 按专业分组求和,准备专业汇总行
city_grouped_sum = city_df.groupby('专业')['实付'].sum().reset_index()
city_grouped_sum.columns = ['专业', '专业实付总和']
# 如果原始数据中没有该地市数据,跳过避免空DataFrame写入
if city_df.empty:
continue
# 将总和行追加到原始数据的末尾,作为汇总行
summary_row = pd.DataFrame({
'月份': [0],
'地市': [0],
'专业': [0],
'公司': [0],
'包年': [0],
'按次': [0],
'发电': [0],
'巡检': [0],
'实付': [city_total_sum]
}, index=[0])
city_df_with_summary = pd.concat([city_df, summary_row], ignore_index=True)
# 添加按专业汇总的数据到DataFrame末尾
city_df_with_summary = pd.concat([city_df_with_summary, city_grouped_sum], ignore_index=True)
# 写入新的Excel文件,每个地市一个文件
output_file_path = os.path.join(output_folder, f"{city}_代维费详情及汇总.xlsx")
city_df_with_summary.to_excel(output_file_path, index=False)
print(f"为地市'{city}'生成的详情及汇总数据已保存至'{output_file_path}'.")
# 使用变量文件路径调用函数
generate_detail_and_summary_per_city(input_file_path)