python中pandas库的使用以及在机器学习数据处理中的简单应用

一、Pandas

Pandas是一个功能强大且易于使用的Python数据分析库,提供了高效的数据结构和数据分析工具,特别适合处理表格数据(如Excel表格、CSV文件等)。以下是Pandas在数据处理中的常见应用及其功能介绍。

导入Pandas库

import pandas as pd

数据结构

Pandas主要提供了两种数据结构:SeriesDataFrame

1. Series

Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)和一组与之相关的数据标签(即索引)组成。

import pandas as pd

# 创建一个Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
2. DataFrame

DataFrame是一个二维的表格数据结构,包含一组有序的列,每列可以是不同的数据类型(数值、字符串、布尔值等)

import pandas as pd
import numpy as np

# 创建一个DataFrame
data = {
    'A': [1, 2, 3, 4],
    'B': [np.nan, 2.5, 3.5, np.nan],
    'C': ['foo', 'bar', 'baz', 'qux']
}
df = pd.DataFrame(data)
print(df)

数据读取

Pandas可以从多种数据源读取数据,例如CSV文件、Excel文件、SQL数据库等。

# 读取CSV文件
df = pd.read_csv('data.csv')

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

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

数据清洗

数据清洗是数据分析中一个重要的步骤,Pandas提供了丰富的功能来处理缺失值、重复值等问题

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

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

# 填充缺失值
df.fillna(0, inplace=True)
df['B'].fillna(df['B'].mean(), inplace=True)
处理重复值
# 检查重复值
print(df.duplicated())

# 删除重复值
df.drop_duplicates(inplace=True)

数据操作

Pandas提供了多种数据操作功能,如筛选、排序、分组等。

筛选数据
# 根据条件筛选数据
filtered_df = df[df['A'] > 2]

# 筛选特定列
selected_columns = df[['A', 'C']]
排序数据
# 按列排序
sorted_df = df.sort_values(by='B', ascending=False)
分组数据
# 分组并计算汇总统计
grouped = df.groupby('C').sum()

数据转换

Pandas支持多种数据转换操作,如重塑数据、合并数据等。

重塑数据
# 转换列为行(透视表)
pivot_df = df.pivot(index='A', columns='C', values='B')
合并数据
# 合并两个DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2']})
df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'], 'B': ['B3', 'B4', 'B5']})
merged_df = pd.concat([df1, df2])

# 基于共同列合并
merged_df = pd.merge(df1, df2, on='A')

数据可视化

Pandas集成了Matplotlib库,可以方便地进行数据可视化

import matplotlib.pyplot as plt

# 简单折线图
df.plot()
plt.show()

# 柱状图
df.plot(kind='bar')
plt.show()

二、在机器学习中的应用

特征工程

特征工程是机器学习中提升模型性能的关键步骤。Pandas 提供了强大的数据操作功能,可以方便地进行特征工程

特征工程是机器学习中提升模型性能的关键步骤。Pandas 提供了强大的数据操作功能,可以方便地进行特征工程

# 删除无关特征
df.drop(['irrelevant_column1', 'irrelevant_column2'], axis=1, inplace=True)
特征转换

对特征进行转换,例如归一化、标准化、编码等。

from sklearn.preprocessing import MinMaxScaler, StandardScaler, LabelEncoder

# 归一化
scaler = MinMaxScaler()
df['normalized_column'] = scaler.fit_transform(df[['original_column']])

# 标准化
scaler = StandardScaler()
df['standardized_column'] = scaler.fit_transform(df[['original_column']])

# 编码分类特征
encoder = LabelEncoder()
df['encoded_column'] = encoder.fit_transform(df['categorical_column'])
特征构造

通过现有特征构造新的特征,例如交互特征、多项式特征等

# 交互特征
df['interaction'] = df['feature1'] * df['feature2']

# 多项式特征
df['feature1_squared'] = df['feature1'] ** 2
df['feature2_cubed'] = df['feature2'] ** 3

模型训练

在完成数据准备和特征工程后,可以使用 Pandas 将数据分成训练集和测试集,并使用各种机器学习算法进行模型训练。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 分割数据集
X = df.drop('target', axis=1)
y = df['target']
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)

# 预测
y_pred = model.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

模型评估

评估模型的性能是机器学习中至关重要的一步。可以使用各种评估指标来评估模型的好坏,并通过可视化手段更直观地了解模型的表现。

import matplotlib.pyplot as plt
from sklearn.metrics import r2_score

# 评估模型性能
r2 = r2_score(y_test, y_pred)
print(f'R2 Score: {r2}')

# 可视化实际值与预测值
plt.scatter(y_test, y_pred)
plt.xlabel('Actual Values')
plt.ylabel('Predicted Values')
plt.title('Actual vs Predicted')
plt.show()

# 查看残差分布
residuals = y_test - y_pred
plt.hist(residuals, bins=20)
plt.xlabel('Residual')
plt.ylabel('Frequency')
plt.title('Residual Distribution')
plt.show()

实际应用示例

以下是一个完整的示例,展示如何使用 Pandas 进行数据读取、清洗、特征工程、模型训练和评估。

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv('data.csv')

# 检查数据
print(df.head())
print(df.info())
print(df.describe())
print(df.isnull().sum())

# 处理缺失值
df.fillna(df.mean(), inplace=True)

# 特征工程
df['interaction'] = df['feature1'] * df['feature2']
df['feature1_squared'] = df['feature1'] ** 2

# 特征选择
X = df[['feature1', 'feature2', 'interaction', 'feature1_squared']]
y = df['target']

# 分割数据集
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)

# 预测
y_pred = model.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
print(f'R2 Score: {r2}')

# 可视化实际值与预测值
plt.scatter(y_test, y_pred)
plt.xlabel('Actual Values')
plt.ylabel('Predicted Values')
plt.title('Actual vs Predicted')
plt.show()

# 查看残差分布
residuals = y_test - y_pred
plt.hist(residuals, bins=20)
plt.xlabel('Residual')
plt.ylabel('Frequency')
plt.title('Residual Distribution')
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值