python入门系列二十四(pandas数据分析利器)

0 阅读3分钟

1.引言

pandas是专门为数据分析任务而生的库,你看是专业的!其中纳入了大量的库和标准数据模型,提供高效操作数据集所需工具,以及便捷处理数据的函数和方法。pandas支持丰富的数据结构,比如:

  • 一维数组Series,对应于python中的列表List,深度学习中向量
  • 二维型表格数据结构DataFrame
  • 三维面板数组Panel
  • 甚至四维Panel4D

等等。像当下大模型背后的机器学习,深度学习数据处理阶段,需要大量使用pandas库进行数据预处理。今天我们通过这篇文章,争取搞清楚pandas常见玩法。

2.案例

2.1.环境准备

老规矩,使用pandas需要安装,同时在安装的时候,建议同步安装numpy库和matplotlib库,方便数据计算和可视化操作

pip install pandas numpy matplotlib

2.2.认识核心数据结构

2.2.1.一维数组

import  pandas as pd

# 一维数组
s = pd.Series([1,3,6,9])
print(s)

image.png 指定数组索引和名称

import  pandas as pd

# 一维数组
s = pd.Series([1,3,6,9], index=['a','b','c','d'],name='series1')
print(s)

image.png

常用方法:

import  pandas as pd

# 一维数组
s = pd.Series([1,3,6,9], index=['a','b','c','d'],name='series1')

# 常用方法
print(s.describe())  # 统计摘要
print(s.value_counts())  # 值计数
print(s.apply(lambda x: x**2))  # 应用函数

image.png

2.2.2.二维表格

# 二维表格
data = {
    'name':['李雷','韩梅梅','小王'],
    'age':[18,19,20],
    'sex':['男','女','男']
}

df = pd.DataFrame(data)
print(df)

image.png

添加列:

image.png

删除列:

image.png

2.3.数据读写

2.3.1.准备一份示例数据

import  pandas as pd
import os

# 准备示例数据
os.makedirs(os.path.join('.','data'), exist_ok=True)
data_file = os.path.join('.','data','house_tiny.csv')
with open(data_file,'w') as f:
    f.write('NumRooms,Alley,Price\n')
    f.write('NA,Pave,127500\n')
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

image.png

2.3.2.数据预览

import  pandas as pd
import os

# 加载文件
data_file = os.path.join('.','data','house_tiny.csv')
df = pd.read_csv(data_file)

# 数据预览
print(df.head(2))      # 前2行
print(df.tail())       # 最后5行
print(df.sample(3))    # 随机3行
print(df.describe())   # 数值列统计
print(df.info())       # 数据结构信息

image.png

2.3.3.读写数据

import  pandas as pd
import os

# 加载文件
data_file = os.path.join('.','data','house_tiny.csv')
df = pd.read_csv(data_file)

# 读写数据
print(df)

# 保存为新文件
df.to_csv(os.path.join('.','data','house_tiny_new.csv'),index=False)

image.png

2.4.数据清洗

2.4.1.处理缺失值

import pandas as pd
import numpy as np

# 创建含缺失值的数据
data = {
    "姓名": ["张三", "李四", None, "王五"],
    "年龄": [25, np.nan, 28, 35],
    "部门": ["销售", "技术", "技术", None]
}
df = pd.DataFrame(data)

# 检测缺失值
print(df.isnull().sum())


# 填充缺失值
df["年龄"].fillna(df["年龄"].mean(), inplace=True)  # 均值填充
df["部门"].fillna("未知", inplace=True)             # 固定值填充

print(df)

image.png

2.4.2.处理重复值

import pandas as pd
import numpy as np

# 创建含缺失值的数据
data = {
    "姓名": ["张三", "李四", None, "王五"],
    "年龄": [25, np.nan, 28, 35],
    "部门": ["销售", "技术", "技术", None]
}
df = pd.DataFrame(data)

# 处理重复值
# 添加重复数据
print("添加重复行:")
df = df._append(df.iloc[0])
print(df)

print("标记重复行:")
print(df.duplicated())        # 标记重复行

print("删除重复行:")
df.drop_duplicates(inplace=True)  # 删除重复行
print(df)

image.png

2.5.数据进阶操作

2.5.1.数据筛选

import pandas as pd
import numpy as np

# 创建含缺失值的数据
data = {
    "姓名": ["张三", "李四", None, "王五"],
    "年龄": [25, np.nan, 28, 35],
    "部门": ["销售", "技术", "技术", None]
}
df = pd.DataFrame(data)

# 数据筛选
print(df[df["年龄"] > 30])                  # 年龄大于30岁

print(df[(df["部门"] == "技术") & (df["年龄"] > 25)])  # 复合条件

# 使用query方法
print(df.query("年龄 < 30 and 部门 == '销售'"))

image.png

2.5.2.数据排序

import pandas as pd
import numpy as np

# 创建含缺失值的数据
data = {
    "姓名": ["张三", "李四", None, "王五"],
    "年龄": [25, np.nan, 28, 35],
    "部门": ["销售", "技术", "技术", None]
}
df = pd.DataFrame(data)

# 数据排序
df.sort_values(by=["姓名", "年龄"],
              ascending=[False, True],
              inplace=True)
print(df)

image.png

2.5.3.分组聚合

import pandas as pd
import numpy as np

# 创建含缺失值的数据
data = {
    "姓名": ["张三", "李四", None, "王五"],
    "年龄": [25, np.nan, 28, 35],
    "部门": ["销售", "技术", "技术", None]
}
df = pd.DataFrame(data)

# 分组聚合
# 按部门分组统计
group = df.groupby("部门")
print(group.agg({
    "年龄": ["mean", "max", "min"]
}))

image.png