不匹配的列:如果该数据的日期不存在 (python),则添加新行并替换为 N/A

Mismatched columns: Add new row and replace with N/A if the date doesn't exist for that data (python)

我有一个非常大的数据集,在不同的列中包含以下格式的信息。

    DATE        Data    DATE.2      Data2   DATE.3      Data3   DATE.4      Data4 Data5
0   2018-01-01  2.4054  2018-01-02  9.77    2018-01-02  2695.81 2018-01-01  98  358
1   2018-01-02  2.4633  2018-01-03  9.15    2018-01-03  2713.06 2018-01-02  98  355
2   2018-01-03  2.4471  2018-01-04  9.22    2018-01-04  2723.99 2018-01-03  99  348
3   2018-01-04  2.4525  2018-01-05  9.22    2018-01-05  2743.15 2018-01-04  98  340
4   2018-01-05  2.4763  2018-01-08  9.52    2018-01-08  2747.71 2018-01-05  98  336
5   2018-01-08  2.4800  2018-01-09  10.08   2018-01-09  2751.29 2018-01-08  97  335
6   2018-01-09  2.5530  2018-01-10  9.82    2018-01-10  2748.23 2018-01-09  96  333

我正在进行清理过程,我只需要一个日期列而不是 4 个。正如您从数据中看到的那样,每一行的日期都不匹配,因此我需要如果当天的相关日期列中没有数据,请想出一种方法来获取代码以在其中创建一个包含 N/A 的新行。

比如我需要写的代码:

    DATE        Data     Data2    Data3  Data4 Data5
0   2018-01-01  2.4054   N/A      N/A     98   358
1   2018-01-02  2.4633   9.77     2695.81 98   355

有人知道如何实现吗?提前感谢任何 advice/pointers.

有很多方法可以实现。

您可以尝试使用您的数据集创建一个新的数据框。

  1. 创建一个包含日期列的新数据框,并将旧 df(数据框)中的所有日期(date.2、date.3 等)插入您的列中。
  2. 删除此列中的重复项(如果存在)
  3. 接下来使用默认值 N/A 创建 Data、Data2、Data3、Data4 列。
  4. 选择数据、数据 2、数据 3、数据 4 值,其中(数据 == new_df.date 或数据.2 == new_df.date .....)

这些步骤的功能在 pandas 中可用。

最后成功排序:

df_1 = af[['DATE', 'Data']]
df_2 = af[['DATE.2', 'Data2']].rename(columns = {'DATE.2': 'DATE'})
df_3 = af[['DATE.3', 'Data3']].rename(columns = {'DATE.3': 'DATE'})
df_4 = af[['DATE.4', 'Data4', 'Data5']].rename(columns = {'DATE.4': 'DATE'})

new = df_1.merge(df_2, on = 'DATE', how = 'outer').merge(df_3, on = 'DATE', how = 'outer').merge(df_4, on = 'DATE', how = 'outer')
new['Data'].fillna("N/A", inplace = True)
new['Data2'].fillna("N/A", inplace = True)
new['Data3'].fillna("N/A", inplace = True)
new['Data4'].fillna("N/A", inplace = True)
new['Data5'].fillna("N/A", inplace = True)
new