csv 匹配或最接近匹配的两个dataframe datetime列,并从第二个dataframe中只读取一个列值

cpjpxq1n  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(124)

我有两个csv文件-
CSV A-

Timestamp          Date/Time            Error_1            Error_2
170:02:46:928    2023/01/01 16:45:11     APP_ERR         Loss_of_Data
170:28:37:328    2023/01/01 17:11:04     APP_ERR         SB_Data_Expiration

CSV B-

Timestamp          Date/Time            Error_1            Error_2                 Error_3
170:02:46:928    2023/01/01 16:45:07     APP_ERR         Loss_of_Data               NO_ERROR
170:14:40:928    2023/01/01 16:45:10     APP_ERR         Loss_of_Data               Loss_of_Data 
170:28:16:928    2023/01/01 17:10:44     APP_ERR         Cnx_Attempt                NO_ERROR 
170:28:37:328    2023/01/01 17:11:04     APP_ERR         SB_Data_Expiration         ERROR 
170:29:57:728    2023/01/01 17:11:04     APP_ERR         PEB_due_to_overlimit       Due_to_Over_SBI 
170:32:59:978    2023/01/01 17:11:04     APP_ERR         Cnx_Attempt                NO_ERROR 
170:33:40:778    2023/01/01 17:16:08     APP_ERR         Cnx_Attempt                NO_ERROR

我想比较CSV-A和CSV-B的日期/时间,如果日期/时间匹配或最接近的匹配,则读取Error_3列值。最终输出我想要类似于-
CSV A-

Timestamp          Date/Time            Error_1            Error_2             Error_3
170:02:46:928    2023/01/01 16:45:11     APP_ERR         Loss_of_Data           Loss_of_Data
170:28:37:328    2023/01/01 17:11:04     APP_ERR         SB_Data_Expiration     ERROR

CSV-A Date/Time(2023/01/01 16:45:11)的第一行在CSV-B中不匹配,这就是为什么我们检查最近的匹配,即“2023/01/01 16:45:10”(如果不完全匹配,通常会有1或2秒的差异)。第二行有三个完全匹配,但我们需要读取CSV-B Error_2 ='SB_Data_Expiration'的值。
谢谢你的帮助提前。

amrnrhlw

amrnrhlw1#

使用read_csvparse_dates作为日期时间,然后传递给merge_asof,参数为direction='nearest'tolerance

df1 = pd.read_csv(file1, parse_dates=[1])
df2 = pd.read_csv(file2, parse_dates=[1])

df = pd.merge_asof(df1, 
                   df2[['Date/Time','Error_3']], 
                   on='Date/Time', 
                   direction='nearest', 
                   tolerance=pd.Timedelta('3 sec'))
print (df)
       Timestamp           Date/Time  Error_1             Error_2  \
0  170:02:46:928 2023-01-01 16:45:11  APP_ERR        Loss_of_Data   
1  170:28:37:328 2023-01-01 17:11:04  APP_ERR  SB_Data_Expiration   

        Error_3  
0  Loss_of_Data  
1         ERROR

相关问题