Python Pandas - 熔化



Pandas 中的熔化是指将 DataFrame 从宽格式转换为长格式的过程。在宽格式中,数据分布在多个列中。简单来说,它会“反转”DataFrame 的列为行,这对于可视化和对数据集执行统计分析很有用。

Pandas 库提供了melt()wide_to_long() 函数,用于将 DataFrame 从宽格式转换为长格式。在本教程中,我们将学习 Pandas 中的melt()wide_to_long() 函数,以及如何使用这两种方法将 DataFrame 从宽格式转换为长格式。

Pandas 中的熔化

Pandas 中的melt() 函数将宽 DataFrame 转换为长格式。这只不过是“反转”DataFrame。

示例

以下示例演示了使用pandas.melt() 函数熔化一个简单的 DataFrame。

import pandas as pd

# Create a DataFrame
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},'B': {0: 1, 1: 3, 2: 5},'C': {0: 2, 1: 4, 2: 6}})

# Display the input DataFrame
print('Input DataFrame:\n', df)

# Melt the DataFrame
melted_df = pd.melt(df, id_vars=['A'], value_vars=['B'])

print('Output melted DataFrame:\n', melted_df)

以下是上述代码的输出 -

Input DataFrame:
ABC
0a12
1b34
2c56
Output melted DataFrame:
Avariablevalue
0aB1
1bB3
2cB5

示例:在熔化时处理索引值

此示例演示了在使用pandas.melt() 函数熔化 DataFrame 时如何处理缺失值。

import pandas as pd

# Create a DataFrame
index = pd.MultiIndex.from_tuples([("person", "A"), ("person", "B")])
df= pd.DataFrame({
"first": ["John", "Mary"],"last": ["Doe", "Bo"],
"height": [5.5, 6.0],"weight": [130, 150]}, index=index)

# Display the input DataFrame
print('Input DataFrame:\n', df)

# Melt the DataFrame
melted_df = pd.melt(df, id_vars=["first", "last"], ignore_index=False)

print('Output melted DataFrame:\n', melted_df)

以下是上述代码的输出 -

Input DataFrame:
firstlastheightweight
personAJohnDoe5.5130
BMaryBo6.0150
Output melted DataFrame:
firstlastvariablevalue
personAJohnDoeheight5.5
BMaryBoheight6.0
AJohnDoeweight130.0
BMaryBoweight150.0

使用 wide_to_long() 熔化

pandas wide_to_long() 函数提供了对转换的更多控制。当您的列具有包含后缀的结构化命名模式时,它很有用。

示例

此示例使用wide_to_long() 函数执行高级熔化转换。

import pandas as pd

# Create a DataFrame
df = pd.DataFrame({'famid': [1, 1, 1, 2, 2, 2, 3, 3, 3],
'birth': [1, 2, 3, 1, 2, 3, 1, 2, 3],
'ht1': [2.8, 2.9, 2.2, 2, 1.8, 1.9, 2.2, 2.3, 2.1],
'ht2': [3.4, 3.8, 2.9, 3.2, 2.8, 2.4, 3.3, 3.4, 2.9]})

# Display the input DataFrame
print('Input DataFrame:\n', df)

# Melt the DataFrame using wide_to_long()
long_df = pd.wide_to_long(df, stubnames='ht', i=['famid', 'birth'], j='age')

print('Output Long Melted DataFrame:\n', long_df)

以下是上述代码的输出 -

Input DataFrame:
famidbirthht1ht2
0112.83.4
1122.93.8
2132.22.9
3212.03.2
4221.82.8
5231.92.4
6312.23.3
7322.33.4
8332.12.9
Output Long Melted DataFrame:
ht
famidbirthage
1112.8
23.4
212.9
23.8
312.2
22.9
2112.0
23.2
211.8
22.8
311.9
22.4
3112.2
23.3
212.3
23.4
312.1
22.9
广告