我有一个很大的合同CSV数据库(2500万行,大约7 GB).我需要过滤掉过期的合同,以减少进一步计算的大小.过期日期数组包含混合格式的日期(dd/mm/yyyy和dd/mm/yyyy hh/mm/ss).
我试过使用这个代码:
#reading database
reader = pd.read_csv(path_contracts, sep="|", header=0, low_memory=False, chunksize=1000000)
output = "Base_Filtered.csv"
#filtering chunks
for contracts in reader:
contracts[name_date_end] = pd.to_datetime(contracts[name_date_end], dayfirst=True, format='mixed')
#conditional
contracts = contracts[(contracts[name_date_end]>=date_report)]
#outputing filtered chunks
contracts.to_csv(output, sep="|")
但我得到了这个错误:
pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 31.08.8020, at position 3584
我已经判断了位置3584,它返回06.11.2021:
print(contracts.at[3584,name_date_end])
06.11.2021
因此,我try 创建一个包含此元素的数据库的较小版本(5k行),它工作得非常好.
在try 过滤数据块之前,我曾try 一次过滤整个数据库.它产生了相同的误差,但在不同的位置.
找不到问题的根源和解决方案.