重塑 DataFrame 是数据迷信中一项重要且必不可少的技能。在本文中,咱们将探讨 Pandas Melt() 以及如何应用它进行数据处理。
最简略的 melt
最简略的 melt() 不须要任何参数,它将所有列变成行(显示为列变量)并在新列值中列出所有关联值。
df_wide.melt()
这个输入通常没有多大意义,所以个别用例至多指定了 id_vars 参数。例如,id_vars = ‘Country’ 会通知 pandas 将 Country 保留为一列,并将所有其余列转换为行。
df_wide.melt(id_vars='Country',)
当初行数为 15,因为 Country 列中的每个值都有 5 个值(3 X 5 = 15)。
显示自定义名称
“变量”和“值”是列名。咱们能够通过 var_name 和 value_name 参数指定自定义名称:
df_wide.melt(
id_vars='Country',
var_name='Date',
value_name='Cases'
)
指定多个 ID
Melt() 最有用的个性之一是咱们能够指定多个 id 以将它们保留为列。例如,如果咱们想保留 Country、Lat 和 Long 作为列以便更好地参考:
df_wide.melt(id_vars=['Country', 'Lat', 'Long'],
var_name='Date',
value_name='Cases'
)
指定 melt 的列
Pandas 的 melt() 函数默认状况下会将所有其余列(除了 id_vars 中指定的列)转换为行。在理论我的项目中可能只关怀某些列,例如,如果咱们只想查看“24/01/2020”和“25/01/2020”上的值:
df_wide.melt(id_vars=['Country', 'Lat', 'Long'],
value_vars=["24/01//2020", "25/01//2020"],
var_name='Date',
value_name='Cases'
)
Pandas melt
咱们也能够间接从 Pandas 模块而不是从 DataFrame 调用 melt()。然而,这些是雷同的。
重塑 COVID-19 工夫序列数据
有了到目前为止咱们学到的常识,让咱们来看看一个事实世界的问题:约翰霍普金斯大学 CSSE Github 提供的 COVID-19 工夫序列数据。
有两个问题:
- 确认、死亡和复原保留在不同的 CSV 文件中。将它们绘制在一张图中并不简略。
- 日期显示为列名,它们很难执行逐日计算,例如计算每日新病例、新死亡人数和新痊愈人数。
让咱们重塑 3 个数据集并将它们合并为一个 DataFrame。
读取数据集
confirmed_df = pd
.read_csv('time_series_covid19_confirmed_global.csv')
deaths_df = pd
.read_csv('time_series_covid19_deaths_global.csv')
recovered_df = pd
.read_csv('time_series_covid19_recovered_global.csv')
将它们从宽格局革新成长格局
通过运行 confirmed_df.columns、deaths_df.columns 和 recovered_df.columns,它们都应该输入如下雷同的后果:
请留神,列都是从第 4 列开始的日期,并获取确认的日期列表 df.columns [4:]
在合并之前,咱们须要应用 melt() 将 DataFrames 从以后的宽格局逆透视为长格局。换句话说,咱们将所有日期列转换为值。应用“省 / 州”、“国家 / 地区”、“纬度”、“经度”作为标识符变量。咱们稍后将它们进行合并。
confirmed_df_long = confirmed_df.melt(id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'],
value_vars=dates,
var_name='Date',
value_name='Confirmed'
)
deaths_df_long = deaths_df.melt(id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'],
value_vars=dates,
var_name='Date',
value_name='Deaths'
)
recovered_df_long = recovered_df.melt(id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'],
value_vars=dates,
var_name='Date',
value_name='Recovered'
)
所有后果都是新的长格局。所有这些都按日期和国家 / 地区排序,因为原始数据曾经按国家 / 地区排序,并且日期列曾经按 ASC 顺序排列。
这是 confirmed_df_long 的例子
最初,咱们应用 merge() 将 3 个 DataFrame 一个接一个合并:
full_table = confirmed_df_long.merge(
right=deaths_df_long,
how='left',
on=['Province/State', 'Country/Region', 'Date', 'Lat', 'Long']
)
full_table = full_table.merge(
right=recovered_df_long,
how='left',
on=['Province/State', 'Country/Region', 'Date', 'Lat', 'Long']
)
当初,咱们失去一个蕴含 Confirmed、Deaths 和 Recovered 列的残缺表格:
总结
在本文中,咱们介绍了 5 个用例和 1 个理论示例,这些示例应用 Pandas 的 melt() 办法将 DataFrame 从宽格局重塑为长格局。它十分不便,是数据预处理和探索性数据分析过程中最受欢迎的办法之一。
重塑数据是数据迷信中一项重要且必不可少的技能。我心愿你喜爱这篇文章并学到一些新的有用的货色。
本文代码:https://github.com/BindiChen/…
作者:B。Chen