【python数据预处理笔记】——整齐数据(Tidy Data)

本文介绍了将数据整理为整洁数据(Tidy Data)的重要性,探讨了Pandas库中的pd.stack()和pd.melt()方法在数据预处理中的应用,并通过三个实际练习展示了如何处理列名包含多个特征值、一列数据涵盖多个特征以及变量存储在行和列中的数据。通过这些操作,可以将原始数据转换为适合分析的格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目 录

1. Tidy Data

  我们平时所使用的数据都是经过整理的整齐数据(Tidy Data),然而实际上我们接收到的数据很多都是杂乱无章的,为了进行数据的预处理,我们需要先把数据转换为整齐的数据。看下面一个例子,数据来自美国皮尤研究中心的报告,研究了美国宗教和收入之间的关系。

import pandas as pd

pew_raw = pd.read_csv('data/tidy-data/pew.csv')
pew_raw.head(10)

在这里插入图片描述

  数据每行为不同宗教信仰下收入在不同等级的人的数量。我们希望得到这样一份数据。每行显示信仰某个宗教的名称,收入情况以及频数。下面我们用两种方法实现以下。

2. pd.stack()

  stack()函数可以把列名转化为新一级的索引,正是我们想要的就是把各个收入等级转化为收入这一特征下的不同特征值。但是注意到前面还有一列宗教,所以不能直接进行stack()

# 先把宗教列变为索引
df = pew_raw.set_index('religion')
df.head()

在这里插入图片描述

df = df.stack()
df.head()

在这里插入图片描述
  现在df有两个索引,我们可以用unstack()函数指定索引列展开数据

df.unstack(0)

在这里插入图片描述

df.unstack(1)

在这里插入图片描述
  现在的df是一个有二级索引的Series,我们对二级索引命名为income,把数据列命名为frequency

df.index = df.index.rename('income', level = 1)    # 不要忘了指定是哪个索引列
df.name = 'frequency'
df.head()

在这里插入图片描述
  接着我们可以用reset_index()函数把Series还原为DataFrame

pew_df = df.reset_index()
pew_df.to_csv('data/tidy-data/pew-tidy1.csv', index = False)
pew_df.head(10)

在这里插入图片描述

3. pd.melt()

  除了使用多级索引,Pandas 还提供了另一种更为便捷的方法——melt()。该方法接收以下参数:

  • frame: 需要处理的数据框;
  • id_vars: 保持原样的数据列;
  • value_vars: 需要被转换成变量值的数据列;
  • var_name: 转换后变量的列名;
  • value_name: 数值变量的列名。
pew_df = pd.melt(pew_raw, id_vars=['religion'], value_vars=list(pew_raw.columns)[1:],
             var_name='income', value_name='frequency')
pew_df = pew_df.sort_values(by='religion')
pew_df.to_csv('data/tidy-data/pew-tidy2.csv', index=False)
pew_df.head(10)

在这里插入图片描述

4. 练习1——列名是一个特征的多个值

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值