检查器,用于更新数据框Python

时间:2019-01-24 14:25:29

标签: python python-3.x pandas dataframe if-statement

我在数据框old_df中有一个Excel文件,通过从另一个Excel文件数据框new_df中添加新的内容,可以使数据保持最新。如果新数据帧中的日期之一在旧数据帧中不存在,我只是pd.concat将新数据帧和旧数据帧一起使用。

当前该文件中的一些重要列为:

Pub Date      Forecast Time   Forecast Date   State   Temp
2018-12-12    23:00:00        2018-12-20      AK      3
2018-12-12    02:00:00        2018-12-20      AK      3.2
2018-12-12    05:00:00        2018-12-20      AK      2.9
.
.

我想确保在使用新数据更新此旧文件时传递重复的行-用Pub DateForecast Time和{{1跳过Forecast Date的非唯一实例}}。

现在,对于新旧版本,我使用State列表来实现此目的:

Pub Dates

但这会遇到问题,因为如果我添加任何一种相同的dateList_old = date_old.tolist() dateList_new = date_new.tolist() result = any(elm in dateList_new for elm in dateList_old) if result == True: print('One or more of the dates already exists in the database') sys.exit() else: frames = [old_df,new_df] result = pd.concat(frames) result.to_excel("file", encoding="utf-8", index=False) -它将退出整个写入。

我想这样做,以便如果Pub DatePub Date + Forecast Time + Forecast Date + State中,则跳过并继续写入所有其他不存在的行,并仅在所有这些组合都已经存在的情况下退出存在

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:2)

您还可以使用:

df.append(df1,ignore_index=True).drop_duplicates(subset=['Pub Date','Forecast Time','Forecast Date','State'])

将两个数据框视为:

df

    Pub Date Forecast Time Forecast Date State  Temp
0 2018-12-12      23:00:00    2018-12-20    AK   3.0
1 2018-12-12      02:00:00    2018-12-20    AK   3.2
2 2018-12-12      05:00:00    2018-12-20    AK   2.9

df1

    Pub Date Forecast Time Forecast Date State  Temp
0 2018-12-12      23:00:00    2018-12-20    AK   3.0
1 2018-12-13      02:00:00    2018-12-20    AK   3.2
2 2018-12-13      05:00:00    2018-12-20    AK   2.9

df.append(df1,ignore_index=True).drop_duplicates(subset=['Pub Date','Forecast Time','Forecast Date','State'])

    Pub Date Forecast Time Forecast Date State  Temp
0 2018-12-12      23:00:00    2018-12-20    AK   3.0
1 2018-12-12      02:00:00    2018-12-20    AK   3.2
2 2018-12-12      05:00:00    2018-12-20    AK   2.9
4 2018-12-13      02:00:00    2018-12-20    AK   3.2
5 2018-12-13      05:00:00    2018-12-20    AK   2.9

基本上同时添加数据框和仅基于['Pub Date','Forecast Time','Forecast Date','State']的某些列删除重复项

答案 1 :(得分:0)

总结一下您的问题:您有两个数据框(“旧”和“新”),并且想要连接“新”中“旧”中不存在的行(基于发布日期,预测时间,等等。)。是吗?

您可以进行逻辑索引。例如,标识在两个数据框中都满足所有条件的行。

let crypto = EasyCrypt(secret: "mySecretKey", algorithm: .sha256)
let result = crypto.hash("This is very secret text to encrypt")
let otherResult = crypto.hash("This is another secret text to encrypt")

print("result: ", result)
print("otherResult: ", otherResult)