Bootstrap

数据分析入门和实践学习——Pandas 数据处理与分析

数据结构与基础操作

什么是 Pandas 库?它在数据分析中的作用是什么?

Pandas 是一个强大的 Python 数据分析库,提供了高性能、易用的数据结构和数据操作工具。它主要用于数据清洗、数据准备、数据分析和数据可视化等任务。


解释 Pandas 中的 Series 和 DataFrame 数据结构,并说明它们之间的区别

  • Series 是一维数组结构,类似于 Python 中的列表,可以包含任意数据类型。
  • DataFrame 是二维表格结构,类似于关系型数据库中的表。它可以看作是由多个 Series 组成的数据结构,每个 Series 对应一列数据。

代码示例

import pandas as pd

# 创建 Series
s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(s)

# 创建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)

如何从 CSV 文件中读取数据到 Pandas DataFrame 中?

可以使用 Pandas 的 read_csv() 函数从 CSV 文件中读取数据到 DataFrame 中。

代码示例

df = pd.read_csv('file.csv')  # 从 CSV 文件读取数据
print(df.head())  # 查看前几行

如何选择 Pandas DataFrame 中的特定行和列?

可以使用 DataFrame 的 loc[]iloc[] 方法选择特定的行和列:

  • loc[] 方法通过标签选择。
  • iloc[] 方法通过索引选择。

代码示例

# 示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# 通过标签选择
print(df.loc[0, 'A'])  # 选择第一行的 A 列

# 通过索引选择
print(df.iloc[0, 0])  # 选择第一行第一列

数据处理与操作

如何处理 Pandas DataFrame 中的缺失值?

可以使用以下方法:

  1. 删除缺失值dropna()
  2. 填充缺失值fillna()
  3. 插值处理interpolate()

代码示例

data = {'A': [1, None, 3], 'B': [4, 5, None]}
df = pd.DataFrame(data)

# 删除缺失值
print(df.dropna())

# 填充缺失值
print(df.fillna(0))

# 插值处理
print(df.interpolate())

什么是数据透视表(Pivot Table)?如何在 Pandas 中创建数据透视表?

数据透视表是一种用于汇总和分析数据的表格结构,可以根据一个或多个字段对数据进行聚合和分组。

代码示例

data = {'Name': ['Alice', 'Bob', 'Alice', 'Bob'],
        'Category': ['A', 'A', 'B', 'B'],
        'Values': [10, 20, 30, 40]}
df = pd.DataFrame(data)

# 创建数据透视表
pivot_table = pd.pivot_table(df, values='Values', index='Name', columns='Category', aggfunc='sum')
print(pivot_table)

如何在 Pandas 中进行数据聚合和分组?

可以使用 groupby() 方法对数据进行分组,然后使用聚合函数(如 sum()mean() 等)进行操作。

代码示例

data = {'Name': ['Alice', 'Bob', 'Alice', 'Bob'],
        'Category': ['A', 'A', 'B', 'B'],
        'Values': [10, 20, 30, 40]}
df = pd.DataFrame(data)

# 按 Name 分组求和
grouped = df.groupby('Name')['Values'].sum()
print(grouped)

如何使用 Pandas 和 Matplotlib 创建直方图和密度图?

代码示例

import matplotlib.pyplot as plt

# 示例 DataFrame
data = {'Values': [1, 2, 2, 3, 3, 3, 4, 4, 5]}
df = pd.DataFrame(data)

# 直方图
df['Values'].plot.hist(bins=5)
plt.show()

# 密度图
df['Values'].plot.kde()
plt.show()

如何使用 Pandas 对时间序列数据进行处理?

可以使用 Pandas 的 datetime 模块处理时间序列数据,并使用 resample() 进行重采样。

代码示例

# 创建时间序列
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')
data = {'Date': date_rng, 'Values': range(10)}
df = pd.DataFrame(data)

# 将字符串转换为日期时间类型
df['Date'] = pd.to_datetime(df['Date'])

# 设置索引
df.set_index('Date', inplace=True)

# 重采样
resampled = df.resample('2D').sum()
print(resampled)

如何使用 Pandas 进行数据合并和连接?

可以使用以下方法:

  1. 合并(merge():基于某列值进行连接。
  2. 连接(concat():沿轴方向连接多个 DataFrame。

代码示例

df1 = pd.DataFrame({'ID': [1, 2], 'Name': ['Alice', 'Bob']})
df2 = pd.DataFrame({'ID': [1, 2], 'Age': [25, 30]})

# 合并
merged = pd.merge(df1, df2, on='ID')
print(merged)

# 连接
concat = pd.concat([df1, df2], axis=1)
print(concat)

数据分析与统计

如何在 Pandas 中处理重复值?

可以使用 drop_duplicates() 删除重复行,或 duplicated() 标识重复值。

代码示例

data = {'A': [1, 2, 2, 4], 'B': [5, 6, 6, 8]}
df = pd.DataFrame(data)

# 删除重复行
print(df.drop_duplicates())

# 标识重复值
print(df.duplicated())

如何在 Pandas 中进行数据类型转换?

可以使用 astype() 方法转换数据类型。

代码示例

data = {'A': ['1', '2', '3']}
df = pd.DataFrame(data)

# 转换为整数类型
df['A'] = df['A'].astype(int)
print(df.dtypes)

异常值是什么?如何处理异常值?

异常值是与大多数数据显著不同的数据点。可以使用统计方法(如 Z 分数或 IQR)识别异常值。

代码示例

import numpy as np

data = {'Values': [10, 12, 15, 100, 20]}
df = pd.DataFrame(data)

# 使用 Z 分数处理异常值
df['Z_Score'] = (df['Values'] - df['Values'].mean()) / df['Values'].std()
print(df)

# 删除 Z 分数超过 3 的异常值
filtered_df = df[df['Z_Score'].abs() <= 3]
print(filtered_df)

如何使用 Pandas 对文本数据进行分词和词频统计?

可以结合 Pandas 和 Python 文本处理库(如 NLTK 或 SpaCy)对文本数据进行分词,然后统计词频。

代码示例

import pandas as pd
from collections import Counter

# 示例文本数据
data = {'Text': ['I love Python', 'Python is great', 'I love coding']}
df = pd.DataFrame(data)

# 分词
df['Words'] = df['Text'].str.split()

# 统计词频
all_words = df['Words'].explode()
word_count = Counter(all_words)
print(word_count)

如何使用 Pandas 对时间序列数据进行重采样和滑动窗口分析?

可以使用 Pandas 的 resample() 方法对时间序列数据进行重采样,或者使用 rolling() 方法进行滑动窗口分析。

代码示例

import pandas as pd

# 创建时间序列数据
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')
data = {'Date': date_rng, 'Values': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]}
df = pd.DataFrame(data)

# 重采样:按 3 天为单位求和
df.set_index('Date', inplace=True)
resampled = df.resample('3D').sum()
print(resampled)

# 滑动窗口分析:计算移动平均值
rolling = df['Values'].rolling(window=3).mean()
print(rolling)

如何在 Pandas 中进行数据统计和描述性分析?

可以使用 describe() 方法快速生成数据的描述性统计信息,也可以使用其他方法(如 mean()std()min()max() 等)计算单个统计指标。

代码示例

data = {'A': [10, 20, 30, 40, 50], 'B': [15, 25, 35, 45, 55]}
df = pd.DataFrame(data)

# 描述性统计
print(df.describe())

# 计算单个指标
print(df['A'].mean())  # 平均值
print(df['B'].std())   # 标准差

什么是数据清洗?在数据分析中,为什么数据清洗是重要的?

数据清洗 是对数据进行筛选、修正、填充或删除的过程,以确保数据质量和准确性。
清洗后的数据能避免错误、不一致或缺失的影响,从而提高分析的准确性和可靠性。

代码示例

data = {'Name': ['Alice', None, 'Charlie'], 'Age': [25, None, 35]}
df = pd.DataFrame(data)

# 数据清洗
df_cleaned = df.dropna()  # 删除缺失值
print(df_cleaned)

如何使用 Pandas 和 Matplotlib 进行数据可视化?

可以结合 Pandas 和 Matplotlib 快速创建可视化图表。

代码示例

import matplotlib.pyplot as plt

data = {'Category': ['A', 'B', 'C'], 'Values': [10, 20, 30]}
df = pd.DataFrame(data)

# 条形图
df.plot.bar(x='Category', y='Values')
plt.show()

# 折线图
df.plot.line(x='Category', y='Values')
plt.show()

如何在 Pandas 中处理字符串数据?

可以使用 Pandas 的字符串方法(str)进行处理,包括分割、替换、合并、大小写转换等。

代码示例

data = {'Text': ['hello world', 'Pandas is great']}
df = pd.DataFrame(data)

# 转换为大写
df['Uppercase'] = df['Text'].str.upper()

# 替换字符
df['Replaced'] = df['Text'].str.replace(' ', '-')

# 分割字符串
df['Split'] = df['Text'].str.split()

print(df)

如何在 Pandas 中创建自定义数据透视表?

可以使用 pivot_table() 创建具有特定行、列和聚合函数的透视表。

代码示例

data = {'Name': ['Alice', 'Bob', 'Alice', 'Bob'],
        'Category': ['A', 'A', 'B', 'B'],
        'Values': [10, 20, 30, 40]}
df = pd.DataFrame(data)

# 创建透视表
pivot = pd.pivot_table(df, values='Values', index='Name', columns='Category', aggfunc='sum')
print(pivot)

如何处理 Pandas DataFrame 中的异常值?

可以使用统计方法(如 Z 分数或 IQR 方法)检测并处理异常值。

代码示例

import numpy as np

data = {'Values': [10, 12, 15, 100, 20]}
df = pd.DataFrame(data)

# 计算 IQR
Q1 = df['Values'].quantile(0.25)
Q3 = df['Values'].quantile(0.75)
IQR = Q3 - Q1

# 定义异常值范围
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 过滤异常值
filtered_df = df[(df['Values'] >= lower_bound) & (df['Values'] <= upper_bound)]
print(filtered_df)
;