重塑 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