在AI+数据分析这片广阔天地里,Pandas好比利器,会让处理数据变得轻松自如。
不管你是想清洗杂乱无章的数据,还是要从海量信息中提取价值,Pandas都能帮你轻松搞定。
在Pandas世界里,Series和DataFrame是两大主力选手。
Series就像一个智能化的列表,不仅能存数字,还能放字符串,甚至是日期时间。DataFrame则更像个超级电子表格,能同时处理多种类型的数据。
让我们通过一个小案例来认识它们:
import pandas as pd
# 创建一个Series - 存储一组城市的温度数据
temperatures = pd.Series([25, 28, 23, 30, 27],
index=['北京', '上海', '广州', '深圳', '杭州'],
name='温度')
print("城市温度数据:\n", temperatures)
# 创建一个DataFrame - 存储城市的天气信息
weather_data = {
'温度': [25, 28, 23, 30, 27],
'湿度': [45, 60, 80, 70, 55],
'天气': ['晴', '多云', '雨', '晴', '多云']
}
cities = ['北京', '上海', '广州', '深圳', '杭州']
weather_df = pd.DataFrame(weather_data, index=cities)
print("\n城市天气信息:\n", weather_df)
# 数据访问
print("\n上海的天气信息:\n", weather_df.loc['上海'])
print("\n所有城市的温度:\n", weather_df['温度'])
这段代码如魔术一样,轻松创建了一个温度Series和一个天气DataFrame。Series就像一个城市温度表,而DataFrame则包含了更多信息,就像一个小型气象站。
打开数据世界的大门
Pandas最强大之处在于它能处理各种格式的数据文件。
CSV、Excel、JSON,统统不在话下。好比让你有一把万能钥匙,能打开各种数据的大门。
import pandas as pd
# 从CSV文件读取数据
sales_df = pd.read_csv('sales_data.csv')
# 查看数据基本信息
print("数据概览:")
print(sales_df.info())
# 查看前5行数据
print("\n前5行数据:")
print(sales_df.head())
# 基本统计信息
print("\n基本统计信息:")
print(sales_df.describe())
# 保存数据到Excel
sales_df.to_excel('sales_analysis.xlsx',
sheet_name='销售数据',
index=False)
# 从Excel读取特定sheet的数据
excel_data = pd.read_excel('sales_analysis.xlsx',
sheet_name='销售数据')
一通操作,直接给数据装上了翅膀,可以自由地在不同格式间转换。不管是读取CSV文件还是保存Excel表格,都是小菜一碟。
这些只是Pandas的冰山一角。在下一部分,我们将深入探讨数据清洗和分析的奥秘。
承接上文,我们继续探索Pandas的魔法世界。当你面对杂乱无章的数据时,Pandas直接化身细心的管家,帮你打理得井井有条。
数据清洗:让杂乱数据变得整洁有序
数据清洗就像给数据洗澡,处理缺失值、删除重复项、转换数据类型,一切都变得干净整洁。来看看这个实用的数据清洗示例:
import pandas as pd
import numpy as np
# 创建一个包含问题数据的DataFrame
messy_data = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '张三', np.nan],
'年龄': ['25', np.nan, '35', '28', '40'],
'城市': ['北京', '上海', None, '北京', '广州'],
'注册日期': ['2023-01-01', '2023/02/01', '2023.03.01', '2023-01-01', '2023-04-01']
})
print("原始数据:\n", messy_data)
# 1. 处理缺失值
clean_data = messy_data.dropna(subset=['姓名']) # 删除姓名为空的行
clean_data['城市'].fillna('未知', inplace=True) # 填充城市的空值
# 2. 删除重复行
clean_data = clean_data.drop_duplicates(subset=['姓名', '年龄'], keep='first')
# 3. 数据类型转换
clean_data['年龄'] = pd.to_numeric(clean_data['年龄'], errors='coerce')
clean_data['注册日期'] = pd.to_datetime(clean_data['注册日期'], format='mixed')
print("\n清洗后的数据:\n", clean_data)
# 查看数据信息
print("\n数据信息:")
print(clean_data.info())
数据筛选与排序:精准定位你需要的数据
就像在图书馆里找书一样,Pandas能帮你快速找到需要的数据。不管是简单的条件筛选,还是复杂的多重条件,都能轻松应对。
import pandas as pd
# 创建示例数据
sales_data = pd.DataFrame({
'产品': ['手机', '电脑', '平板', '手机', '电脑', '平板'],
'品牌': ['苹果', '联想', '华为', '三星', '华硕', '小米'],
'价格': [8999, 6999, 3999, 6999, 5999, 2999],
'销量': [500, 300, 400, 450, 350, 600],
'评分': [4.8, 4.6, 4.7, 4.5, 4.4, 4.9]
})
print("原始数据:\n", sales_data)
# 基础筛选:价格大于5000的产品
expensive = sales_data[sales_data['价格'] > 5000]
print("\n价格高于5000的产品:\n", expensive)
# 多条件筛选:销量大于400且评分大于4.6的产品
popular_good = sales_data[(sales_data['销量'] > 400) & (sales_data['评分'] > 4.6)]
print("\n热销且好评的产品:\n", popular_good)
# 按价格降序排列,销量升序排列
sorted_data = sales_data.sort_values(['价格', '销量'], ascending=[False, True])
print("\n按价格降序、销量升序排列:\n", sorted_data)
# 按品牌分组统计
summary = sales_data.groupby('产品').agg({
'价格': 'mean',
'销量': 'sum',
'评分': 'mean'
}).round(2)
print("\n产品类别统计:\n", summary)
通过这些实例,你可以看到Pandas就像一个数据管家,帮你打理各种杂乱的数据。不管是清洗数据还是筛选排序,都变得如此简单。
数据聚合和分组运算就像给数据做体检,能让你一眼看出数据的"健康状况"。Pandas为我们提供了强大的工具,轻松应对各种复杂的分析需求。
数据聚合:从数字中发现故事
来看看如何用Pandas进行数据聚合分析:
import pandas as pd
# 创建销售数据
sales_data = pd.DataFrame({
'日期': pd.date_range('2024-01-01', '2024-01-10'),
'产品类别': ['电子', '服装', '电子', '食品', '服装',
'电子', '食品', '服装', '电子', '食品'],
'销售额': [5000, 3000, 4500, 2000, 3500,
6000, 2500, 4000, 5500, 3000],
'销售量': [50, 100, 45, 200, 120,
60, 250, 130, 55, 300],
'利润率': [0.3, 0.4, 0.35, 0.25, 0.45,
0.32, 0.28, 0.42, 0.33, 0.26]
})
# 基础聚合分析
category_summary = sales_data.groupby('产品类别').agg({
'销售额': ['sum', 'mean'],
'销售量': ['sum', 'mean'],
'利润率': 'mean'
}).round(2)
print("各类别销售汇总:\n", category_summary)
# 时间序列分析
daily_trend = sales_data.set_index('日期').resample('3D').agg({
'销售额': 'sum',
'销售量': 'sum',
'利润率': 'mean'
}).round(2)
print("\n三日销售趋势:\n", daily_trend)
# 自定义聚合分析
def profit_analysis(data):
total_sales = data['销售额'].sum()
avg_profit = data['利润率'].mean()
return pd.Series({
'总销售额': total_sales,
'预计利润': total_sales * avg_profit,
'平均利润率': avg_profit
})
profit_summary = sales_data.groupby('产品类别').apply(profit_analysis).round(2)
print("\n各类别利润分析:\n", profit_summary)
数据合并:让数据集成为一体
有时候我们需要把多个数据源的信息整合到一起,Pandas提供了多种数据合并的方式:
import pandas as pd
# 创建商品信息数据
products = pd.DataFrame({
'商品ID': ['A001', 'A002', 'A003', 'A004'],
'商品名': ['iPhone', 'MacBook', 'iPad', 'AirPods'],
'类别': ['手机', '电脑', '平板', '配件']
})
# 创建销售数据
sales = pd.DataFrame({
'商品ID': ['A001', 'A002', 'A003', 'A001', 'A004'],
'销售日期': ['2024-01-01', '2024-01-01', '2024-01-02',
'2024-01-02', '2024-01-03'],
'销售量': [10, 5, 8, 12, 20],
'单价': [8999, 12999, 6999, 8999, 1999]
})
# 创建库存数据
inventory = pd.DataFrame({
'商品ID': ['A001', 'A002', 'A003', 'A004', 'A005'],
'库存量': [100, 50, 80, 200, 150],
'仓库': ['北京', '上海', '广州', '北京', '深圳']
})
# 1. 使用merge合并商品信息和销售数据
sales_info = pd.merge(sales, products, on='商品ID', how='left')
print("销售详情:\n", sales_info)
# 2. 计算销售金额并与库存信息合并
sales_info['销售金额'] = sales_info['销售量'] * sales_info['单价']
full_info = pd.merge(sales_info, inventory[['商品ID', '库存量']],
on='商品ID', how='left')
print("\n完整商品信息:\n", full_info)
# 3. 使用concat横向合并数据
inventory_extended = pd.concat([
inventory,
pd.DataFrame({
'安全库存': [50, 30, 40, 100, 80],
'补货点': [30, 20, 25, 60, 50]
})
], axis=1)
print("\n扩展库存信息:\n", inventory_extended)
掌握了这些数据分析技巧,你就能像数据科学家一样,灵活运用Pandas处理各种复杂的数据分析任务。AI数据分析不再是难事,而是一场充满乐趣的探索之旅。
记住,Pandas就是你的得力助手,它能帮你整理数据、发现规律、挖掘价值。多加练习,你也能成为数据分析高手!