Pandas入门:把数据变成你的超能力!!!

敲黑板!!如果你还在用Excel手动处理几万行数据,或者写一堆for循环折腾CSV文件——停下!立刻!马上! Pandas就是为你准备的“数据瑞士军刀”!🛠️ (相信我,学完你会回来谢我的)

数据江湖的“万能钥匙”:DataFrame 和 Series

想象一下:Excel表格 + 数据库 + 超强计算引擎 = Pandas核心数据结构

💡 Series:你以为它是一维数组?不!它是带“身份证”的超级数组!
import pandas as pd

# 创建一个Series,自动配索引!酷毙了!
prices = pd.Series([29.9, 359.0, 199.0], name="商品价格", index=["鼠标", "键盘", "显示器"])  
print(prices)  
# 输出👇:  
# 鼠标      29.9  
# 键盘     359.0  
# 显示器    199.0  
# Name: 商品价格, dtype: float64  

重点来了prices["键盘"] 直接定位!prices.mean() 秒算均价!告别循环!(爽不爽?)

💡 DataFrame:这才是Pandas的“核武器”!!!
# 直接上实战!创建订单表
data = {
    "订单号": ["A001", "A002", "A003"],
    "商品": ["鼠标", "键盘", "显示器"],
    "数量": [2, 1, 3],
    "单价": [29.9, 359.0, 199.0]
}
df = pd.DataFrame(data)

# 瞬间开启上帝视角 👇
print(df.head(2))  # 看前2行,巨方便!
订单号商品数量单价
0A001鼠标229.9
1A002键盘1359.0

(看到没?原生支持表格打印!比print(list)高级一万倍!)

🧹 数据清洗:从“脏乱差”到“白富美”的魔法

真实世界的数据有多坑? 缺失值、重复行、错误格式… 别怕!Pandas专治不服!

场景1:空值处理(Missing Data)
# 故意加个空值
df.loc[2, "单价"] = None  

# 方案1:删!dropna()
clean_df = df.dropna()  # 直接干掉空值行

# 方案2:填!fillna()
df["单价"].fillna(199.0, inplace=True)  # 原地填充!inplace=True真香!  
场景2:去除重复(Duplicates Killer)
# 手滑加了个重复订单
df = pd.concat([df, df.head(1)])  # 复制第一行  

print(df[df.duplicated()])  # 揪出重复项!  
df.drop_duplicates(inplace=True)  # 一键清除!  
场景3:数据类型矫正(Type Fixer)
# “数量”列被误读成字符串?不能忍!
df["数量"] = df["数量"].astype(int)  # 强制转整数  

# “日期”列是文本?秒变时间戳!
df["下单日期"] = ["2023-01-01", "2023-01-02", "2023-01-03"]
df["下单日期"] = pd.to_datetime(df["下单日期"])  # 原地变身日期类型!  

🔍 数据查询:像侦探一样挖掘信息!

招式1:条件过滤(布尔索引 yyds!)
# 找出单价超过100的大订单
big_orders = df[df["单价"] > 100]  

# 复合查询:键盘且数量>1 (虽然这里没有,但写法超重要!)
keyboard_orders = df[(df["商品"] == "键盘") & (df["数量"] > 1)]  
招式2:神技query():像写SQL一样丝滑!
high_value = df.query("单价 > 100 and 数量 >= 2")  
招式3:lociloc:精准定位“细胞级”数据!
# 用标签选:loc[行标签, 列标签]
print(df.loc[0, "商品"])  # 输出"鼠标"  

# 用位置选:iloc[行索引, 列索引]
print(df.iloc[1, 2])  # 输出第二行第三列:1(键盘数量)  

# 切片狂魔操作 👇
print(df.loc[0:2, ["商品", "单价"]])  # 选前3行,只看商品和单价列  

📊 聚合统计:GroupBy——让数据自己说话!

终极灵魂问题:每种商品的总销售额是多少??GroupBy+Agg一步到位!

# 神之操作开始!
result = df.groupby("商品").agg(
    总数量=("数量", "sum"),       # 对“数量”列求和
    平均单价=("单价", "mean"),   # 计算单价均值
    订单数=("订单号", "count")   # 统计订单数
)

print(result)  
商品总数量平均单价订单数
显示器3199.01
鼠标229.91
键盘1359.01

(这表一出,老板直接给你加鸡腿!🍗)

🚀 效率加速:向量化操作 vs Python循环(性能对决!)

血泪教训:别用for循环处理Pandas数据!慢到怀疑人生!

# ❌ 错误示范(龟速)  
total_cost = 0  
for i in range(len(df)):  
    total_cost += df["数量"][i] * df["单价"][i]  

# ✅ Pandas正确姿势(闪电速度⚡)  
df["总价"] = df["数量"] * df["单价"]  # 向量化运算,秒出结果!  
total_cost = df["总价"].sum()  

原理:Pandas底层用C优化!整列计算比循环快几百倍!(亲测10万行数据,循环30秒 vs 向量化0.1秒!!)

🌟 实战:用Pandas解决真实问题(电商数据分析)

任务:分析销售数据,找出:

  1. 最畅销的商品类别
  2. 单笔订单平均销售额
  3. 每日销售趋势
# 假设df已包含日期、商品类别、销售额等列

# 1. 按类别聚合销量  
top_category = df.groupby('类别')['数量'].sum().sort_values(ascending=False).head(1)  

# 2. 计算客单价(平均订单金额)  
avg_order_value = df.groupby('订单号')['总价'].sum().mean()  

# 3. 按日统计销售额  
daily_sales = df.set_index('下单日期').resample('D')['总价'].sum()  
daily_sales.plot(title="每日销售趋势")  # 无缝衔接Matplotlib画图!  

💡 避坑指南(血泪经验总结!)

  1. SettingWithCopyWarning 警告

    • 遇到它别慌!通常是因为链式赋值(如 df[df['价格']>100]['折扣']=0.9 ❌)
    • 正确做法:用loc一步到位 df.loc[df['价格']>100, '折扣'] = 0.9
  2. 内存爆炸

    • 处理1GB+数据时,用dtype优化(例如category类型处理文本)
    • 试试chunksize分块读取:pd.read_csv('超大文件.csv', chunksize=50000)
  3. 保存成果

    • 导出Excel:df.to_excel("分析结果.xlsx", index=False) (重要!index=False避免多出索引列)
    • 存为CSV:df.to_csv("clean_data.csv", encoding='utf-8-sig') (支持中文Excel打开不乱码!)

结语:Pandas不是库,是生产力核弹! 💥

别再手动折腾数据了!掌握Pandas后:

  • 清洗10万行数据?几分钟搞定!
  • 复杂聚合分析?几行代码出图!
  • 周报自动化?脚本一键生成!

(偷偷说:我见过太多人用Excel折腾到凌晨,而Pandas使用者…早已下班喝咖啡去了 ☕)

立刻行动:打开Jupyter Notebook,复制文中的代码跑一遍!遇到报错?谷歌“Pandas + 你的报错”——99%的问题Stack Overflow都有解!(别问我是怎么知道的 😉)

终极忠告:Pandas的学习曲线?前陡后平!熬过前3小时,受益整个职业生涯!🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值