在数据驱动的时代,有效的数据治理是企业挖掘数据价值、驱动科学决策的基石。数据分析与清洗作为数据治理流程中的核心环节,直接决定了后续分析与建模的质量。本文将聚焦于强大的Python数据分析库pandas,探讨如何高效地进行数据清洗、分析,并重点介绍创建新字段的实用技巧。为助力读者实践,文末将提供同款示例数据供下载练习。
pandas是基于NumPy构建的、专为结构化数据(如表格数据)设计的库。它提供了两种核心数据结构:Series(一维数组)和DataFrame(二维表格)。凭借其简洁的API和强大的功能,pandas已成为数据科学家和数据分析师进行数据预处理和探索性分析(EDA)的首选工具。其核心优势在于能轻松处理数据加载、清洗、转换、合并、重塑以及分析等一系列任务。
在利用pandas处理数据时,通常遵循以下关键步骤:
pd.read<em>csv()、pd.read</em>excel()等函数将数据加载为DataFrame。随后通过.head()、.info()、.describe()方法快速了解数据规模、列类型、缺失值和统计摘要。.isnull()或.isna()。.dropna()删除含有缺失值的行或列。.fillna()用特定值(如均值、中位数、众数或前向/后向填充)进行填充。.duplicated()识别重复行,并用.drop_duplicates()删除,确保数据唯一性。.astype()转换列的数据类型(如将字符串转为日期)。对于分类数据或文本数据,可能需要进行标准化(如大小写统一)或编码(如独热编码)。创建新字段(派生列)是数据分析中从现有数据提炼新信息的关键操作。pandas提供了极其灵活的方式来实现。
直接对列进行数学运算来创建新列。`python
import pandas as pd
# 假设df中有‘单价’和‘数量’列
df['总金额'] = df['单价'] * df['数量']`
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)`
assign()方法进行链式操作assign()方法可以方便地在不修改原DataFrame的情况下创建新列,并支持链式调用,使代码更清晰。`python
df = df.assign(
折扣后金额 = lambda x: x['总金额'] * 0.9,
是否大单 = lambda x: x['折扣后金额'] > 1000
)`
np.where()或.mask()/.where()np.where()函数是进行元素级条件赋值的利器。`python
import numpy as np
df['客户类型'] = np.where(df['消费金额'] > 1000, 'VIP', '普通')`
对于字符串类型的列,可以通过.str访问器使用丰富的字符串方法。`python
# 假设‘姓名’列,提取姓氏(假设为第一个字符)
df['姓氏'] = df['姓名'].str[0]
# 分割地址信息
df['城市'] = df['地址'].str.split('市').str[0]`
如果数据包含日期时间列,可以通过.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>year和order</em>quarter(季度)字段。
5. 计算每个客户的总消费金额,并创建新列customer_type,总消费>2000的标记为“高价值客户”。
示例代码框架:`python
import pandas as pd
import numpy as np
df = pd.readcsv('samplesalesdata.csv', parsedates=['order_date'])
print(df.info())
print(df.head())
df['totalamount'] = df['quantity'] * df['unitprice']
conditions = [
df['totalamount'] > 500,
(df['totalamount'] >= 100) & (df['totalamount'] <= 500),
df['totalamount'] < 100
]
choices = ['大单', '中单', '小单']
df['order_size'] = np.select(conditions, choices, default='未知')
df['orderyear'] = df['orderdate'].dt.year
df['orderquarter'] = df['orderdate'].dt.quarter
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-28 19:05:45