当前位置: 首页 > 产品大全 > 数据治理新篇章 利用pandas实现数据分析、清洗与字段创建

数据治理新篇章 利用pandas实现数据分析、清洗与字段创建

数据治理新篇章 利用pandas实现数据分析、清洗与字段创建

在数据驱动的时代,有效的数据治理是企业挖掘数据价值、驱动科学决策的基石。数据分析与清洗作为数据治理流程中的核心环节,直接决定了后续分析与建模的质量。本文将聚焦于强大的Python数据分析库pandas,探讨如何高效地进行数据清洗、分析,并重点介绍创建新字段的实用技巧。为助力读者实践,文末将提供同款示例数据供下载练习。

一、pandas:数据分析与清洗的瑞士军刀

pandas是基于NumPy构建的、专为结构化数据(如表格数据)设计的库。它提供了两种核心数据结构:Series(一维数组)和DataFrame(二维表格)。凭借其简洁的API和强大的功能,pandas已成为数据科学家和数据分析师进行数据预处理和探索性分析(EDA)的首选工具。其核心优势在于能轻松处理数据加载、清洗、转换、合并、重塑以及分析等一系列任务。

二、数据分析与清洗的核心步骤

在利用pandas处理数据时,通常遵循以下关键步骤:

  1. 数据加载与初步审视:使用pd.read<em>csv()pd.read</em>excel()等函数将数据加载为DataFrame。随后通过.head().info().describe()方法快速了解数据规模、列类型、缺失值和统计摘要。
  1. 处理缺失值:缺失值是数据清洗的常见挑战。pandas提供了多种处理策略:
  • 识别:使用.isnull().isna()
  • 删除:使用.dropna()删除含有缺失值的行或列。
  • 填充:使用.fillna()用特定值(如均值、中位数、众数或前向/后向填充)进行填充。
  1. 处理重复值:使用.duplicated()识别重复行,并用.drop_duplicates()删除,确保数据唯一性。
  1. 数据类型转换与标准化:使用.astype()转换列的数据类型(如将字符串转为日期)。对于分类数据或文本数据,可能需要进行标准化(如大小写统一)或编码(如独热编码)。
  1. 异常值检测与处理:通过描述性统计、箱线图或标准差方法识别异常值,并根据业务逻辑决定是修正、删除还是保留。

三、pandas创建新字段的实战技巧

创建新字段(派生列)是数据分析中从现有数据提炼新信息的关键操作。pandas提供了极其灵活的方式来实现。

1. 基于算术运算

直接对列进行数学运算来创建新列。
`python
import pandas as pd
# 假设df中有‘单价’和‘数量’列

df['总金额'] = df['单价'] * df['数量']
`

2. 使用apply()函数应用自定义逻辑

当创建逻辑较为复杂时,apply()函数非常强大,它可以将一个函数应用到DataFrame的每一行或每一列。
`python
# 示例:根据成绩创建等级列

def get_grade(score):
if score >= 90:
return 'A'
elif score >= 80:
return 'B'
else:
return 'C'

df['等级'] = df['成绩'].apply(get_grade)
`

3. 使用assign()方法进行链式操作

assign()方法可以方便地在不修改原DataFrame的情况下创建新列,并支持链式调用,使代码更清晰。
`python
df = df.assign(
折扣后金额 = lambda x: x['总金额'] * 0.9,
是否大单 = lambda x: x['折扣后金额'] > 1000
)
`

4. 基于条件逻辑创建字段:np.where().mask()/.where()

np.where()函数是进行元素级条件赋值的利器。
`python
import numpy as np
df['客户类型'] = np.where(df['消费金额'] > 1000, 'VIP', '普通')
`

5. 使用字符串方法处理文本列

对于字符串类型的列,可以通过.str访问器使用丰富的字符串方法。
`python
# 假设‘姓名’列,提取姓氏(假设为第一个字符)

df['姓氏'] = df['姓名'].str[0]
# 分割地址信息

df['城市'] = df['地址'].str.split('市').str[0]
`

6. 使用日期时间功能

如果数据包含日期时间列,可以通过.dt访问器提取丰富信息。
`python
df['订单年份'] = df['订单日期'].dt.year
df['订单月份'] = df['订单日期'].dt.month
df['星期几'] = df['订单日期'].dt.day_name()
`

四、实践演练:赠送同款数据与代码示例

为了帮助您将上述理论付诸实践,我们准备了一份模拟的电商订单数据集(sample<em>sales</em>data.csv),其中包含:order<em>id(订单ID)、customer</em>id(客户ID)、product(产品)、quantity(数量)、unit<em>price(单价)、order</em>date(订单日期)等字段。

您的数据分析与处理任务如下
1. 加载数据,并检查数据概览与缺失值。
2. 计算每个订单的total<em>amount(总金额 = 数量 * 单价)。
3. 基于total</em>amount,创建一个新列order<em>size,规则为:总金额>500为“大单”,100-500之间为“中单”,小于100为“小单”。
4. 从order</em>date中提取order<em>yearorder</em>quarter(季度)字段。
5. 计算每个客户的总消费金额,并创建新列customer_type,总消费>2000的标记为“高价值客户”。

示例代码框架
`python
import pandas as pd
import numpy as np

1. 加载数据

df = pd.readcsv('samplesalesdata.csv', parsedates=['order_date'])
print(df.info())
print(df.head())

2. 创建总金额字段

df['totalamount'] = df['quantity'] * df['unitprice']

3. 基于条件创建订单大小字段

conditions = [
df['totalamount'] > 500,
(df['total
amount'] >= 100) & (df['totalamount'] <= 500),
df['total
amount'] < 100
]
choices = ['大单', '中单', '小单']
df['order_size'] = np.select(conditions, choices, default='未知')

4. 提取日期信息

df['orderyear'] = df['orderdate'].dt.year
df['orderquarter'] = df['orderdate'].dt.quarter

5. 计算客户类型

customertotal = df.groupby('customerid')['totalamount'].sum().resetindex()
customertotal.rename(columns={'totalamount': 'customerlifetimevalue'}, inplace=True)
df = pd.merge(df, customertotal, on='customerid', how='left')
df['customertype'] = np.where(df['customerlifetime_value'] > 2000, '高价值客户', '一般客户')

查看结果

print(df[['orderid', 'customerid', 'totalamount', 'ordersize', 'orderyear', 'customertype']].head())
`

###

通过pandas进行数据清洗、分析与字段创建,是一个将原始数据转化为高价值信息流的系统过程。掌握这些技能,不仅能提升数据治理的效率与质量,更能为深度分析和机器学习模型构建打下坚实的基础。建议读者下载提供的示例数据,亲自动手运行和修改上述代码,在实践中深化理解,从而在面对真实、复杂的数据挑战时游刃有余。

(注:示例数据文件可通过提供的链接或附件下载。)

如若转载,请注明出处:http://www.iata-boms.com/product/74.html

更新时间:2026-02-27 19:33:41

产品大全

Top