代码之家  ›  专栏  ›  技术社区  ›  Jaffer Wilson Dilip kumar

使用pandas python 3合并csv中的一分钟提前帧值

  •  0
  • Jaffer Wilson Dilip kumar  · 技术社区  · 6 年前

    我试图比较测试文件和模型文件,然后用结果验证它。 以下是我到目前为止所做的尝试:

    import pandas as pd
    data = pd.read_csv("data.csv",encoding = "utf-16", header = 0,sep="\t")
    data.head(20)
    createmodel = data.drop(labels=['param1','param3','param5','param7','param9','param13','param15','colorsame'], axis=1)
    createmodel.drop_duplicates().to_csv("model.csv",index=False,header =True,sep="\t",encoding="utf-16")
    createmodel.head(10)
    createmodel.drop_duplicates().to_csv("test.csv",index=False,header =True,sep="\t",encoding="utf-16")
    createmodel.head(10)
    verifyresult = pd.read_csv("verify.csv",encoding = "utf-16", header = 0,sep="\t")
    verifyresult.head(20)
    result = pd.merge(testmodel,createmodel, on = ["param2","param4","param6","param8","param10","param11","param12","param14","param16"])   
    result = result.drop_duplicates()
    

    这是文件 model 我是说, test ,和 verify

    我已经完成了比较,使用merge语句并在 result 变量。

    唯一困扰我的是,我需要在 result.Time verify.csv 然后将值与结果合并到另一列中。并将其保存为csv。

    最终结果必须如下:
    如果以下是中的数据帧 结果 变量:

    2018.5.1 0:5 0-1    0-1 0-1 0-1 0--1    0   1   -43--42 78-79   Red
    

    并且verify.csv具有:

    2018.5.1 0:6 Green
    

    它是与 结果 变量。

    那么新的框架应该是:

    Time    param2  param4  param6  param8  param10 param11 param12 param14 param16 color Actual
    2018.5.1 0:5 0-1    0-1 0-1 0-1 0--1    0   1   -43--42 78-79   Red Green
    

    这是最后的结果。

    好心的,建议我做什么和实现我想要的。

    1 回复  |  直到 6 年前
        1
  •  1
  •   ALollz    6 年前

    你可以转换你的 'Time' columns to datetime,它允许您轻松地从verify.csv数据帧中减去一分钟,然后您就可以合并(或映射或任何您想要加入它们的内容)

    import pandas as pd
    
    result['Time'] = pd.to_datetime(result['Time'], format='%Y.%m.%d %H:%M')
    verifyresult['Time'] = pd.to_datetime(verifyresult['Time'],  format='%Y.%m.%d %H:%M')
    
    # Only subtract one minute if it is a weekday
    mask = verifyresult['Time'].dt.dayofweek < 5
    verifyresult.loc[mask, 'Time'] = verifyresult.loc[mask, 'Time'] - pd.Timedelta(minutes=1)
    
    result = result.merge(verifyresult, on='Time')
    # or 
    #result['Actual'] = result['Time'].map(verifyresult.set_index('Time').Actual)
    

    输出:

                     Time param2 param4 param6 param8 param10  param11  param12  param14 param16 color Actual
    0 2018-05-01 00:05:00    0-1    0-1    0-1    0-1    0--1        0        1  -43--42   78-79   Red  Green