乐趣区

关于深度学习:使用Pandas-melt重塑DataFrame

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

退出移动版