您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何进行Python数据加载与整理的分析
## 引言
在数据科学和机器学习项目中,数据加载与整理(Data Loading & Wrangling)是至关重要的第一步。据统计,数据科学家80%的时间都花费在数据清洗和准备上。Python凭借其丰富的生态系统(如Pandas、NumPy等库)成为这一领域的首选工具。本文将系统介绍如何使用Python进行高效的数据加载与整理,涵盖以下核心内容:
- 常见数据格式的加载方法
- 数据质量评估与缺失值处理
- 数据类型转换与标准化
- 数据合并与重塑技巧
- 高效整理的最佳实践
---
## 一、数据加载:从多种来源获取数据
### 1.1 结构化数据加载
#### CSV/Excel文件
```python
import pandas as pd
# 读取CSV(注意编码问题)
df = pd.read_csv('data.csv', encoding='utf-8')
# 读取Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 大文件分块读取
chunk_iter = pd.read_csv('large_data.csv', chunksize=10000)
for chunk in chunk_iter:
process(chunk)
from sqlalchemy import create_engine
# 创建数据库连接
engine = create_engine('postgresql://user:password@localhost:5432/dbname')
# 读取SQL查询结果
query = "SELECT * FROM customers WHERE age > 30"
df = pd.read_sql(query, engine)
# 简单JSON
df = pd.read_json('data.json')
# 嵌套JSON处理
from pandas.io.json import json_normalize
with open('nested.json') as f:
data = json.load(f)
df = json_normalize(data, 'records', ['meta'])
# 使用lxml解析HTML表格
tables = pd.read_html('https://example.com/table.html')
with open('log.txt') as f:
lines = [line.strip() for line in f]
from PIL import Image
import numpy as np
img = Image.open('sample.jpg')
arr = np.array(img)
# 基础信息
print(df.info())
# 统计摘要
print(df.describe(include='all'))
# 缺失值统计
print(df.isnull().sum())
# 删除全空列
df.dropna(axis=1, how='all', inplace=True)
# 删除包含缺失值的行
df.dropna(subset=['important_column'], inplace=True)
# 均值/中位数填充
df['age'].fillna(df['age'].median(), inplace=True)
# 向前填充
df.fillna(method='ffill', inplace=True)
# 模型预测填充(使用Scikit-learn)
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=3)
df_filled = imputer.fit_transform(df)
# Z-score方法
from scipy import stats
z_scores = stats.zscore(df['value'])
df = df[(z_scores < 3)]
# IQR方法
Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['value'] < (Q1 - 1.5*IQR)) | (df['value'] > (Q3 + 1.5*IQR)))]
# 自动转换
df = df.convert_dtypes()
# 强制转换
df['date'] = pd.to_datetime(df['date_str'], format='%Y-%m-%d')
# 分类数据
df['category'] = df['category'].astype('category')
# 正则提取
df['area_code'] = df['phone'].str.extract(r'(\d{3})')
# 分词处理
import jieba # 中文分词
df['words'] = df['text'].apply(lambda x: list(jieba.cut(x)))
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# 归一化
scaler = MinMaxScaler()
df[['age','income']] = scaler.fit_transform(df[['age','income']])
# 标准化
scaler = StandardScaler()
df[['height','weight']] = scaler.fit_transform(df[['height','weight']])
# 纵向合并
pd.concat([df1, df2], axis=0)
# 横向合并
pd.merge(left=df1, right=df2, how='inner', on='key')
# 索引合并
df1.join(df2, how='left')
# 简单透视
pivot = pd.pivot_table(df,
values='sales',
index='region',
columns='quarter',
aggfunc=np.sum)
# 多层索引
stacked = df.stack()
unstacked = df.unstack()
# 宽转长
melted = pd.melt(df,
id_vars=['id','date'],
value_vars=['temp','humidity'])
# 长转宽
pivoted = df.pivot(index='date',
columns='metric',
values='value')
# 差实践
for i in range(len(df)):
df.loc[i,'score'] = calculate_score(df.loc[i])
# 好实践
df['score'] = df.apply(calculate_score, axis=1)
# 查看内存使用
df.memory_usage(deep=True)
# 优化数值类型
df['id'] = df['id'].astype('int32')
(df
.query('age > 18')
.assign(income_group = lambda x: pd.cut(x.income, bins=3))
.groupby('income_group')
.agg({'age':'mean'})
)
from pandarallel import pandarallel
pandarallel.initialize()
df['processed'] = df['text'].parallel_apply(process_text)
数据加载与整理是数据分析的基石。通过掌握: - 多源数据加载技巧 - 系统化的数据清洗流程 - 高效的数据转换方法 - 结构化的合并与重塑操作
配合本文介绍的最佳实践,您将能够构建可靠的数据预处理管道,为后续的分析建模打下坚实基础。建议在实际项目中结合具体需求灵活运用这些技术,并持续关注Pandas等库的版本更新带来的新特性。
延伸阅读:
- Pandas官方文档:https://pandas.pydata.org/docs/
- 《Python for Data Analysis》by Wes McKinney
- Data Wrangling with Python by Jacqueline Kazil “`
注:本文为Markdown格式,实际字数约2500字(含代码示例)。如需调整内容深度或补充特定领域案例,可进一步扩展相应章节。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。