如何进行python数据加载与整理的分析

发布时间:2021-12-02 18:34:41 作者:柒染
来源:亿速云 阅读:244
# 如何进行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)

1.2 半结构化数据

JSON数据

# 简单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'])

XML/HTML数据

# 使用lxml解析HTML表格
tables = pd.read_html('https://example.com/table.html')

1.3 非结构化数据

文本文件

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)

二、数据质量评估与清洗

2.1 初步检查

# 基础信息
print(df.info())

# 统计摘要
print(df.describe(include='all'))

# 缺失值统计
print(df.isnull().sum())

2.2 缺失值处理

删除法

# 删除全空列
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)

2.3 异常值检测

# 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)))]

三、数据转换与标准化

3.1 数据类型转换

# 自动转换
df = df.convert_dtypes()

# 强制转换
df['date'] = pd.to_datetime(df['date_str'], format='%Y-%m-%d')

# 分类数据
df['category'] = df['category'].astype('category')

3.2 文本处理

# 正则提取
df['area_code'] = df['phone'].str.extract(r'(\d{3})')

# 分词处理
import jieba  # 中文分词
df['words'] = df['text'].apply(lambda x: list(jieba.cut(x)))

3.3 特征缩放

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']])

四、数据合并与重塑

4.1 表合并操作

# 纵向合并
pd.concat([df1, df2], axis=0)

# 横向合并
pd.merge(left=df1, right=df2, how='inner', on='key')

# 索引合并
df1.join(df2, how='left')

4.2 数据透视

# 简单透视
pivot = pd.pivot_table(df, 
                      values='sales',
                      index='region',
                      columns='quarter',
                      aggfunc=np.sum)

# 多层索引
stacked = df.stack()
unstacked = df.unstack()

4.3 长宽格式转换

# 宽转长
melted = pd.melt(df, 
                id_vars=['id','date'],
                value_vars=['temp','humidity'])

# 长转宽
pivoted = df.pivot(index='date', 
                  columns='metric',
                  values='value')

五、高效数据整理的最佳实践

  1. 矢量化操作:避免循环,使用Pandas内置方法
# 差实践
for i in range(len(df)):
    df.loc[i,'score'] = calculate_score(df.loc[i])

# 好实践
df['score'] = df.apply(calculate_score, axis=1)
  1. 内存优化:使用合适的数据类型
# 查看内存使用
df.memory_usage(deep=True)

# 优化数值类型
df['id'] = df['id'].astype('int32')
  1. 管道操作:保持代码整洁
(df
 .query('age > 18')
 .assign(income_group = lambda x: pd.cut(x.income, bins=3))
 .groupby('income_group')
 .agg({'age':'mean'})
)
  1. 并行处理:加速大数据操作
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字(含代码示例)。如需调整内容深度或补充特定领域案例,可进一步扩展相应章节。

推荐阅读:
  1. Python介绍与特点(自学python知识整理)
  2. Tensorflow中多线程与多进程数据加载的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:如何用python生成ogg的mapcol参数

下一篇:tk.Mybatis插入数据获取Id怎么实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》