【Pandas】基础命令

0. 地址:

菜鸟教程:https://www.runoob.com/pandas/pandas-install.html
官网地址:https://pandas.pydata.org/

1. 什么是Pandas?

Pandas 是基于Numpy构建的,专门进行表格数据处理的工具库

2. Pandas的核心数据结构

Series:一维带标签数组
DataFrame:二维表格型数据结构

3. Pandas的主要功能

数据清洗和准备
数据整理和转换
数据分析和建模
数据可视化

4. Pandas的环境准备

# 使用 pip 安装
pip install pandas

# 使用 conda 安装
conda install pandas

# 导入pandas
import pandas as pd  # 惯例缩写为 pd

5. Pandas 核心数据结构

(1)Series:一维带标签数组

  • 从列表创建Series时,索引默认为0~n

  • 从字典创建Series时,索引值为key

  • 创建Series时,指定索引用index。必须保证index的长度与Series列数保持一致。

  • Series会默认转换数据类型

    • 当 np.nan存在时,[1, 3, 5, num, 6, 8],自动转换为 float64
    • 当 字母 存在时,[1, 3, 5, 'aa', 6, 8],自动转换为 object
    • 当全是整数时,自动转换为 int64
import pandas as pd
import numpy as np

# 从列表创建Series
s1 = pd.Series([1, 3, 5, np.nan, 6, 8])
print("从列表创建的Series:")
print(s1)

# 从字典创建Series
s2 = pd.Series({'a': 1, 'b': 2, 'c': 3})
print("\n从字典创建的Series:")
print(s2)

# 指定索引
s3 = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print("\n指定索引的Series:")
print(s3)

# Series操作
print("\nSeries操作:")
print("值:", s3.values)
print("索引:", s3.index)

(2)DataFrame:二维表格数据结构

  • 创建二维表格的两种方式:

    • 从字典中创建,字典中的key值 默认为表头,index 默认依旧是0~n
    • 从列表中创建,需要用columns指定表头,否则表头和index均为0~n
    • df.dtypes:默认返回列数据的数据类型。
import pandas as pd
import numpy as np

# 从字典创建DataFrame
data = {
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, 30, 35, 28],
    '城市': ['北京', '上海', '广州', '深圳'],
    '工资': [5000, 7000, 6000, 8000]
}

df = pd.DataFrame(data)
print("创建的DataFrame:")
print(df)

# 从列表创建DataFrame
data_list = [
    ['张三', 25, '北京', 5000],
    ['李四', 30, '上海', 7000],
    ['王五', 35, '广州', 6000],
    ['赵六', 28, '深圳', 8000]
]

df2 = pd.DataFrame(data_list, columns=['姓名', '年龄', '城市', '工资'])
print("\n从列表创建的DataFrame:")
print(df2)

# 查看DataFrame基本信息
print("\nDataFrame基本信息:")
print("形状:", df.shape)
print("列名:", df.columns)
print("索引:", df.index)
print("数据类型:\n", df.dtypes)

6. DataFrame 基本操作

(1)数据查看和选择

  • head():查看前几行(默认前 5 行,括号写数字 = 看几行)

  • tail():查看后几行(默认后 5 行,括号写数字 = 看几行)

  • describe():快速生成数值列统计(总数、均值、标准差、最大 / 最小值)

  • 列选择(列属性):选取一列或多列数据 → df["列名"] / df[["列1","列2"]]

  • loc():标签选择(位置索引)

    • loc:选取一列或多列数据 → df["列名"] / df[["列1","列2"]]

    • iloc:按数字位置选 → df.iloc[行号, 列号]

      • 单行单列:df.iloc[0,1] # 第1行第2列

      • 多行单列:df.iloc[[0,2], 1] # 第1、3行,第2列

      • 单行多列:df.iloc[1, [0,2]] # 第2行,第1、3列

      • 行列切片:起始:结束(左闭右开)

        • df.iloc[0:2, 1:] # 前2行,第2列往后所有列
        • df.iloc[:, 0] # 全部行,第1列
        • df.iloc[1:, :] # 第2行往后全部行,所有列
import pandas as pd
import numpy as np

# 创建示例DataFrame
data_list = [
    ['张三', 25, '北京', 5000],
    ['李四', 30, '上海', 7000],
    ['王五', 35, '广州', 6000],
    ['赵六', 28, '深圳', 8000]
]

df = pd.DataFrame(data_list, columns=['姓名', '年龄', '城市', '工资'], index=["s1", "s2", "s3", "s4"])
print("\n从列表创建的DataFrame:")
print(df)

# 查看数据
print("\n前3行:")
print(df.head(3))

print("\n后2行:")
print(df.tail(2))

print("\n描述性统计:")
print(df.describe())


# 选择数据
print("\n选择单列:")
print(df['姓名'])

print("\n选择多列:")
print(df[['姓名', '年龄']])


print("\n使用loc选择(标签索引):")
print(df.loc['s1'])  # 选择一行
print(df.loc[['s1', 's3']])  # 选择多行
print(df.loc['s1':'s3'])  # 切片选择

print("\n使用iloc选择(位置索引):")
print(df.iloc[0])  # 第一行
print(df.iloc[[0, 2]])  # 选择多行
print(df.iloc[0:3])  # 切片选择

(2)数据筛选和过滤

  • df[df['年龄'] > 30]:用布尔序列筛选,只保留条件为 True 的整行数据
  • df['年龄'] > 30:返回布尔序列,每行标记 True/False,仅判断不筛选
  • query(): 字符串表达式筛选,可以用“and”,“or”
  • sort_values():排序,默认ascending=False 降序;ascending=True 升序
import pandas as pd
import numpy as np

# 创建示例数据
df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五', '赵六', '钱七'],
    '年龄': [25, 30, 35, 28, 32],
    '部门': ['技术部', '销售部', '技术部', '人事部', '销售部'],
    '工资': [5000, 7000, 6000, 5500, 7500]
})

print("原始数据:")
print(df)

# 条件筛选
print("\n年龄大于30的员工:")
print(df[df['年龄'] > 30])

print("\n技术部的员工:")
print(df[df['部门'] == '技术部'])

print("\n使用query方法筛选:")
print(df.query('年龄 > 28 and 工资 < 7000'))


# 排序
print("\n按工资降序排序:")
print(df.sort_values('工资', ascending=False))

print("\n按多列排序(部门升序,工资降序):")
print(df.sort_values(['部门', '工资'], ascending=[True, False]))

(3)缺省值处理

  • isnull():判断是否为空,空返回 True
  • notnull():判断是否非空,非空返回 True
  • dropna():删除包含空值的整行
  • dropna(how='all'):仅删除整行全部为空的数据
  • fillna(0):空值统一填充为 0
  • fillna(df.mean()):数值列空值填充对应列平均值
# -- 元数据
A,B,C
1.0,5.0,9
2.0,,10
,,11
4.0,8.0,12
,,
# ---------------------------------------------

import pandas as pd
import numpy as np

# 读取包含缺失值的数据
df = pd.read_csv("清洗数据.csv", sep=",")

print("原始数据(包含缺失值):")
print(df)

# 检查缺失值
print("\n缺失值统计:")
print(df.isnull().sum())

print("\n非缺失值统计:")
print(df.notnull().sum())

# 删除缺失值
print("\n删除包含缺失值的行:")
print(df.dropna())

print("\n删除全部为缺失值的列:")
print(df.dropna(how='all'))

# 填充缺失值
print("\n用指定值填充缺失值:")
print(df.fillna(0))

print("\n用均值填充:")
print(df.fillna(df.mean()))

(4)数据转换

  • groupby():单维度分组计算(一维表)

    • agg():聚合统计;例如:agg(['mean','count']

      • mean:平均值
      • sum:求和
      • max:最大值
      • min:最小值
      • count:计数
      • std:标准差
  • pivot_table():Python 版 Excel 透视表,行 + 列双维度汇总

# -- 元数据
产品,销售额,地区
A,100,北京
B,200,上海
C,150,广州
A,300,北京
B,250,上海
C,180,广州
# ---------------------------------------------

import pandas as pd

# 创建示例数据
df = pd.read_csv("分组聚合数据.csv", sep=",")
print("原始数据:")
print(df)

# 分组聚合
print("\n按产品分组计算总销售额:")
print(df.groupby('产品')['销售额'].sum())

print("\n按产品和地区分组计算统计量:")
print(df.groupby(['产品', '地区'])['销售额'].agg(['sum', 'mean']))



# 数据透视表
print("\n数据透视表:")
pivot_df = df.pivot_table(index='产品', values="销售额", aggfunc='sum')
print(pivot_df)

print("\n数据透视表:")
pivot_df = df.pivot_table(index=['产品', '地区'], values="销售额", aggfunc=['sum', 'mean'])
print(pivot_df)
posted @ 2026-05-24 21:01  静心笃行。  阅读(7)  评论(0)    收藏  举报