← 返回首页
🐼

Pandas基础:Series、DataFrame与数据读取

📂 python ⏱ 3 min 491 words

Pandas基础:Series、DataFrame与数据读取

Pandas是Python中最流行的数据分析库,提供了高效、灵活的数据结构来处理结构化数据。本文将介绍Pandas的核心概念和基础操作。

Series:一维带标签数组

Series是Pandas的一维数据结构,类似于带索引的字典或NumPy数组:

import pandas as pd
import numpy as np

# 从列表创建Series
s = pd.Series([10, 20, 30, 40, 50])
print(s)
# 0    10
# 1    20
# 2    30
# 3    40
# 4    50

# 自定义索引
s = pd.Series([85, 90, 78], index=['数学', '英语', '物理'])
print(s['数学'])       # 85
print(s['数学', '英语'](/notes/-))  # 数学 85, 英语 90

# 从字典创建
data = {'北京': 2189, '上海': 2487, '广州': 1868}
population = pd.Series(data, name='人口(万)')
print(population)
print(f"上海人口: {population['上海']}万")

# Series运算
print(s + 10)          # 每个元素加10
print(s > 80)          # 布尔判断
print(s.describe())    # 统计摘要

DataFrame:二维表格结构

DataFrame是Pandas的核心数据结构,类似于Excel表格或SQL表:

import pandas as pd

# 从字典创建DataFrame
data = {
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, 30, 35, 28],
    '部门': ['技术', '销售', '技术', '市场'],
    '薪资': [15000, 12000, 18000, 13000]
}
df = pd.DataFrame(data)
print(df)
#    姓名  年龄  部门    薪资
# 0  张三   25  技术  15000
# 1  李四   30  销售  12000
# 2  王五   35  技术  18000
# 3  赵六   28  市场  13000

# 查看基本信息
print(f"形状: {df.shape}")          # (4, 4)
print(f"列名: {df.columns.tolist()}")  # ['姓名', '年龄', '部门', '薪资']
print(df.dtypes)                    # 数据类型
print(df.info())                    # 完整信息摘要

读取数据

Pandas支持多种数据格式的读取:

import pandas as pd

# 读取CSV文件
df = pd.read_csv('data.csv')
df = pd.read_csv('data.csv', encoding='utf-8', index_col=0)

# 读取Excel文件
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 读取JSON文件
df = pd.read_json('data.json')

# 读取SQL(需要数据库连接)
# import sqlite3
# conn = sqlite3.connect('database.db')
# df = pd.read_sql('SELECT * FROM users', conn)

# 读取HTML表格
# df = pd.read_html('https://example.com')[0]

# 保存数据
df.to_csv('output.csv', index=False, encoding='utf-8-sig')
df.to_excel('output.xlsx', index=False)
df.to_json('output.json', force_ascii=False, indent=2)

数据选择

DataFrame提供了多种数据选择方式:

import pandas as pd

df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 35],
    '部门': ['技术', '销售', '技术'],
    '薪资': [15000, 12000, 18000]
})

# 选择列
print(df['姓名'])           # 返回Series
print(df['姓名', '年龄'](/notes/-))  # 返回DataFrame

# 选择行
print(df.iloc[0])           # 第一行(位置索引)
print(df.loc[0])            # 第一行(标签索引)
print(df.iloc[0:2])         # 前两行

# 条件筛选
tech_dept = df[df['部门'] == '技术']
print(tech_dept)

# 多条件筛选
result = df[(df['部门'] == '技术') & (df['年龄'] > 25)]
print(result)

# 查询语法
result = df.query('薪资 > 13000 and 部门 == "技术"')
print(result)

数据查看与统计

import pandas as pd

# 创建示例数据
df = pd.DataFrame({
    '产品': ['A', 'B', 'A', 'B', 'A', 'C'],
    '销量': [100, 150, 120, 130, 110, 200],
    '价格': [10, 15, 10, 15, 10, 20]
})

# 查看前几行
print(df.head())

# 统计摘要
print(df.describe())

# 数值列统计
print(f"销量均值: {df['销量'].mean():.1f}")
print(f"销量中位数: {df['销量'].median()}")
print(f"销量标准差: {df['销量'].std():.1f}")
print(f"最高销量: {df['销量'].max()}")

# 分类列统计
print(df['产品'].value_counts())

# 唯一值
print(f"产品种类: {df['产品'].unique()}")
print(f"产品数量: {df['产品'].nunique()}")

数据修改

import pandas as pd

df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 35],
    '部门': ['技术', '销售', '技术']
})

# 添加新列
df['薪资'] = [15000, 12000, 18000]
df['年龄_年后'] = df['年龄'] + 1

# 删除列
df_dropped = df.drop(columns=['年龄_年后'])

# 重命名列
df_renamed = df.rename(columns={'姓名': '员工姓名', '部门': '所属部门'})

# 修改值
df.loc[df['姓名'] == '李四', '薪资'] = 15000

# 条件赋值
df['薪资等级'] = '普通'
df.loc[df['薪资'] >= 18000, '薪资等级'] = '高级'

print(df)

处理缺失值

import pandas as pd
import numpy as np

# 创建包含缺失值的数据
df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, np.nan, 35, 28],
    '部门': ['技术', '销售', None, '市场'],
    '薪资': [15000, 12000, np.nan, 13000]
})

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

# 删除包含缺失值的行
df_dropped = df.dropna()

# 删除特定列包含缺失值的行
df_dropped2 = df.dropna(subset=['年龄'])

# 填充缺失值
df_filled = df.copy()
df_filled['年龄'] = df_filled['年龄'].fillna(df['年龄'].mean())
df_filled['部门'] = df_filled['部门'].fillna('未知')
df_filled['薪资'] = df_filled['薪资'].fillna(0)

print(df_filled)

实战:销售数据分析

import pandas as pd

# 创建销售数据
sales = pd.DataFrame({
    '日期': ['2024-01-01', '2024-01-02', '2024-01-01', '2024-01-02'],
    '产品': ['手机', '手机', '电脑', '电脑'],
    '销量': [50, 60, 20, 25],
    '单价': [3000, 3000, 8000, 8000]
})

# 计算销售额
sales['销售额'] = sales['销量'] * sales['单价']
print(sales)

# 按产品汇总
product_summary = sales.groupby('产品')['销售额'].sum()
print("\n产品销售额汇总:")
print(product_summary)

# 按日期汇总
daily_summary = sales.groupby('日期')['销售额'].sum()
print("\n每日销售额:")
print(daily_summary)

总结

Pandas的Series和DataFrame是数据分析的核心工具。熟练掌握数据读取、选择、修改和基本统计操作,将为后续的数据清洗、分析和可视化奠定坚实基础。多练习真实数据集,逐步提升数据处理能力。