简介
Pandas 是一个功能强大的数据分析和处理库,提供了多种数据结构来处理和操作数据。
Pandas 是建立在 NumPy 之上的库,并且集成了 NumPy 的功能。Pandas 提供了高级的数据结构和数据操作工具,使得数据处理和分析更加方便和灵活。
Pandas 中的核心数据结构,如 Series 和 DataFrame,可以看作是对 NumPy 数组的扩展。它们提供了更多的功能和灵活性,使得数据处理更加直观和高效。
Pandas 提供了许多与数据处理和分析相关的功能,例如数据加载、数据清洗、数据筛选、聚合计算、数据合并、时间序列处理等。这些功能在处理和分析结构化数据时非常有用。
同时,Pandas 也支持直接使用 NumPy 数组进行计算和操作。您可以将 NumPy 数组转换为 Pandas 的数据结构,利用 Pandas 提供的丰富功能进行数据处理和分析。
总而言之,Pandas 是在 NumPy 的基础上构建的高级数据处理和分析库,它提供了更方便、更灵活的数据结构和操作工具,使得数据处理更加简化和高效。
数据类型
Series(序列)
Series 是一种一维标记数组,可以存储不同类型的数据,并且每个数据点都有与之相关联的标签(索引)。Series 可以看作是带有标签的单列数据,类似于字典或数据库中的一列。它是 Pandas 中最基本的数据结构。
DataFrame(数据帧)
DataFrame 是一个二维的表格数据结构,由多个 Series 组成,每个 Series 表示一列。DataFrame 可以看作是带有标签的多列数据,类似于数据库或电子表格中的表格。它是 Pandas 中最常用的数据结构,具有灵活的索引和多种数据操作功能。
Index(索引)
Index 是一种标签化的数组,它可以用作 Series 和 DataFrame 的行索引或列索引。Index 可以包含重复的标签,也可以是唯一的标签。它提供了快速和高效的数据访问和操作方式。
Panel(面板)
Panel 是一个三维的数据结构,可以看作是由多个 DataFrame 组成的数据集合。它在 Pandas 中的使用相对较少,通常用于处理涉及到三个维度的数据分析和操作。
此外,Pandas 还提供了其他一些较少使用的数据结构,如时间序列数据结构 TimeSeries、分类数据结构 Categorical 等,它们在特定的数据分析场景中可以发挥重要的作用。
这些数据结构使得 Pandas 成为一个强大的工具,可以方便地加载、处理、分析和操作各种类型的数据。您可以根据具体的需求选择合适的数据结构来处理您的数据。
内置的算法模型
pandas 作为一个强大的数据分析库,除了提供丰富的数据操作功能外,还内置了一些常用的算法模型,可以帮助我们更方便地进行数据分析和建模。以下是 pandas 内置的一些常见的算法模型:
线性回归模型
pandas.DataFrame.corr(): 计算特征之间的相关系数。
pandas.DataFrame.cov(): 计算特征之间的协方差矩阵。
pandas.DataFrame.linalg.lstsq(): 使用最小二乘法进行线性回归。
时间序列分析
pandas.DataFrame.rolling(): 滚动窗口计算。
pandas.DataFrame.expanding(): 累积窗口计算。
pandas.DataFrame.ewm(): 指数加权移动平均。
pandas.DataFrame.diff(): 计算时间序列的差分。
pandas.DataFrame.pct_change(): 计算时间序列的百分比变化。
分类模型
pandas.get_dummies(): 对类别特征进行one-hot编码。
pandas.DataFrame.groupby().size(): 进行分组统计。
pandas.DataFrame.apply(): 对数据应用自定义函数。
聚类算法
pandas.DataFrame.cluster.hierarchy.linkage(): 层次聚类算法。
pandas.DataFrame.cluster.K_means(): K-means聚类算法。
缺失值处理
pandas.DataFrame.fillna(): 填充缺失值。
pandas.DataFrame.interpolate(): 插值计算缺失值。
异常值检测
pandas.DataFrame.describe(): 计算数据的统计特征。
pandas.DataFrame.mad(): 计算绝对中位数偏差。
pandas.DataFrame.outlier_detection(): 使用 Z-score 检测异常值。
常见的处理流程
数据导入
使用 pd.read_csv()、pd.read_excel()、pd.read_json() 等函数读取数据文件。
对于数据源是数据库的情况,可以使用 pd.read_sql() 函数从数据库中读取数据。
数据探索
使用 df.head()、df.tail() 查看数据的前几行和后几行。
使用 df.shape、df.dtypes 了解数据的基本信息,如行列数、数据类型。
使用 df.describe() 查看数值型特征的统计特征,如平均值、标准差、最大最小值等。
使用 df.info() 查看数据的内存使用情况和缺失值情况。
数据清洗
处理缺失值:使用 df.fillna() 填充缺失值,或者使用 df.dropna() 删除含有缺失值的行/列。
处理异常值:可以使用统计学方法如 Z-score、IQR 等识别和处理异常值。
处理数据类型:使用 df.astype() 转换数据类型,如将字符型转换为数值型。
处理重复数据:使用 df.drop_duplicates() 删除重复行。
特征工程
创建新特征:使用 df.apply()、df.map()、df.replace() 等函数创建新的特征列。
编码类别特征:使用 pd.get_dummies() 进行one-hot编码。
处理时间序列特征:使用 pd.to_datetime() 转换时间类型,并提取年月日等时间特征。
数据分析
进行描述性统计分析:使用 df.describe()、df.corr()、df.cov() 等函数。
进行可视化分析:利用 Matplotlib、Seaborn 等库绘制各种图表。
进行分组聚合分析:使用 df.groupby() 进行数据分组并计算聚合指标。
模型构建
将数据拆分为训练集和测试集。
调用 scikit-learn 等第三方机器学习库构建模型。
评估模型性能,并进行模型调优。
code实例
# 1. 数据导入
import pandas as pd
df = pd.read_csv('housing.csv')
# 2. 数据探索
print(df.head())
print(df.shape)
print(df.dtypes)
print(df.describe())
print(df.info())
# 3. 数据清洗
# 处理缺失值
df = df.fillna(df.mean())
# 处理异常值
from scipy.stats import zscore
df['z_score'] = abs(zscore(df['price']))
df = df[df['z_score'] < 3]
# 4. 特征工程
# 创建新特征
df['living_area_per_person'] = df['living_area'] / df['num_bedrooms']
# 编码类别特征
df = pd.get_dummies(df, columns=['neighbourhood', 'house_type'])
# 处理时间序列特征
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
# 5. 数据分析
import matplotlib.pyplot as plt
import seaborn as sns
sns.pairplot(df)
plt.show()
# 6. 模型构建
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X = df[['living_area', 'num_bedrooms', 'year', 'month']]
y = df['price']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)
print('Test R-squared:', model.score(X_test, y_test))
数据可视化
要在 Pandas 中进行可视化,可以使用 Matplotlib 或 Seaborn 等库来绘制图表。这些库与 Pandas 无缝集成,可以方便地对 DataFrame 进行可视化。
简单示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 创建一个包含随机数据的 DataFrame
np.random.seed(1)
data = np.random.randn(100, 3)
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
# 绘制折线图
df.plot()
plt.title('Line Plot')
plt.show()
# 绘制散点图
df.plot(kind='scatter', x='A', y='B')
plt.title('Scatter Plot')
plt.show()
# 绘制柱状图
df.plot(kind='bar', stacked=True)
plt.title('Bar Plot')
plt.show()
# 绘制箱线图
df.plot(kind='box')
plt.title('Box Plot')
plt.show()