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

2024-05-17 18:45:03 发布

您现在位置: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

有人知道如何做到这一点吗?提前感谢您的建议/指点


Tags: 数据方法代码信息datadate过程格式
2条回答

实现这一点的方法有很多

您可以尝试使用数据集创建新的数据帧

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

这些步骤的功能在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

相关问题 更多 >