看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.lreshape
是 Pandas 中一个用于对数据进行长格式(long format)重塑的函数。该函数通过将多个列组合为一对对的形式,来转换数据结构。这个函数尤其适用于数据透视和非透视操作,尤其是当你有多对列需要转换时。
将宽格式数据重塑为长格式。DataFrame.pivot 的广义逆操作。
接受一个字典、组,其中每个键都是一个新的列名,每个值都是旧列名的列表,作为重塑的一部分,这些旧列名将“融化”在新列名下。
pandas.lreshape(data, groups, dropna=True)
data (pandas.DataFrame):
groups (dict):
{'value': ['value1', 'value2']}
表示将 value1
和 value2
列合并为一个名为 value
的列。dropna (bool, optional):
True
,即删除包含 NaN 的行。如果设置为 False
,则保留这些行。pandas.lreshape
主要用于将宽格式(wide format)的数据转换为长格式(long format)。当你有一组相关的列,并希望将它们合并为一个列时,这个函数非常有用。特别是在处理多列数据透视表、时间序列数据等场景时,它可以极大简化数据转换的过程。
data = pd.DataFrame({'hr1': [514, 573], 'hr2': [545, 526],
'team': ['Red Sox', 'Yankees'],
'year1': [2007, 2007], 'year2': [2008, 2008]})
data
'''
hr1 hr2 team year1 year2
0 514 545 Red Sox 2007 2008
1 573 526 Yankees 2007 2008
'''
pd.lreshape(data, {'year': ['year1', 'year2'], 'hr': ['hr1', 'hr2']})
'''
team year hr
0 Red Sox 2007 514
1 Yankees 2007 573
2 Red Sox 2008 545
3 Yankees 2008 526
'''
假设我们有一个 DataFrame,记录了两个不同时间点的值。我们希望将这些数据从宽格式转换为长格式。
import pandas as pd
# 构造宽格式数据
data = pd.DataFrame({
'id': [1, 2, 3],
'time1': [10, 20, 30],
'time2': [15, 25, 35]
})
# 显示原始宽格式数据
print("原始宽格式数据:")
print(data)
# 使用 lreshape 函数进行长格式转换
long_format = pd.lreshape(data, groups={'time': ['time1', 'time2']})
# 输出长格式转换后的结果
print("\n长格式转换后的数据:")
print(long_format)
输出结果:
原始宽格式数据:
id time1 time2
0 1 10 15
1 2 20 25
2 3 30 35
长格式转换后的数据:
id time
0 1 10
1 2 20
2 3 30
3 1 15
4 2 25
5 3 35
如果我们有多个列组需要重塑,可以在 groups
参数中指定多个组。
# 构造具有多个列组的宽格式数据
data_multi = pd.DataFrame({
'id': [1, 2, 3],
'height1': [150, 160, 170],
'height2': [155, 165, 175],
'weight1': [50, 60, 70],
'weight2': [55, 65, 75]
})
# 显示原始数据
print("原始数据:")
print(data_multi)
# 使用 lreshape 函数对多个列组进行长格式转换
long_format_multi = pd.lreshape(data_multi,
groups={'height': ['height1', 'height2'],
'weight': ['weight1', 'weight2']})
# 输出转换后的结果
print("\n多列组合后的长格式数据:")
print(long_format_multi)
输出结果:
原始数据:
id height1 height2 weight1 weight2
0 1 150 155 50 55
1 2 160 165 60 65
2 3 170 175 70 75
多列组合后的长格式数据:
id height weight
0 1 150 50
1 2 160 60
2 3 170 70
3 1 155 55
4 2 165 65
5 3 175 75
dropna
参数在某些情况下,转换后的数据可能会包含 NaN 值。可以通过设置 dropna=False
来保留这些行。
# 构造包含 NaN 值的数据
data_with_nan = pd.DataFrame({
'id': [1, 2, 3],
'measure1': [10, None, 30],
'measure2': [None, 25, 35]
})
# 使用 lreshape 函数并保留 NaN 值
long_format_nan = pd.lreshape(data_with_nan,
groups={'measure': ['measure1', 'measure2']},
dropna=False)
# 输出保留 NaN 的结果
print("\n包含 NaN 值的长格式数据:")
print(long_format_nan)
输出结果:
包含 NaN 值的长格式数据:
id measure
0 1 10.0
1 2 NaN
2 3 30.0
3 1 NaN
4 2 25.0
5 3 35.0
pandas.lreshape
是一个非常灵活的工具,特别适用于将宽格式数据转换为长格式。当你处理需要重塑的多列数据时,这个函数可以帮助你简化操作,提升代码的可读性和可维护性。通过掌握这个函数的使用,可以更高效地进行数据预处理和分析。
更新时间:Aug. 14, 2024, 8:31 a.m. 标签:pandas python lreshape 宽表 长表