不匹配的列:如果该数据的日期不存在 (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.
有很多方法可以实现。
您可以尝试使用您的数据集创建一个新的数据框。
- 创建一个包含日期列的新数据框,并将旧 df(数据框)中的所有日期(date.2、date.3 等)插入您的列中。
- 删除此列中的重复项(如果存在)
- 接下来使用默认值 N/A 创建 Data、Data2、Data3、Data4 列。
- 选择数据、数据 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
我有一个非常大的数据集,在不同的列中包含以下格式的信息。
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.
有很多方法可以实现。
您可以尝试使用您的数据集创建一个新的数据框。
- 创建一个包含日期列的新数据框,并将旧 df(数据框)中的所有日期(date.2、date.3 等)插入您的列中。
- 删除此列中的重复项(如果存在)
- 接下来使用默认值 N/A 创建 Data、Data2、Data3、Data4 列。
- 选择数据、数据 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