首页 > 解决方案 > 当它们在Python中的值为“00/00/0000”时如何省略CSV文件中的单元格

问题描述

您好,我有一个代码可以将美国日期转换为来自以下主题的英国日期: Python Date format conversion to UK

但是,我拥有的文件包含日期为 00/00/0000 的单元格,我收到错误消息:

ValueError: 时间数据 '00/00/0000' 与格式 '%d/%m/%Y' 不匹配

请问如何在我的代码中避免这个错误?

import os
import csv
import pandas as pd


from datetime import datetime

def normalizeDateString(ds):
# normalizes a date of format "d / d / dddd " to "dd/dd/dddd" ```
    sp = ds.replace(" ","").split("/")
    if len(sp[0])==1:
        sp[0]="0"+sp[0]
    if len(sp[1])==1:
        sp[1]="0"+sp[1]

    return sp[0]+"/"+sp[1]+"/"+sp[2]

def parseDT(dateString):
# parses "dd/dd/yyyy" as US (month/day/year). Fallback to (day/month/year) on error'''
    try:
        repl =  normalizeDateString(dateString)        
        return datetime.strptime(repl, "%m/%d/%Y").date()

    except:
        return datetime.strptime(repl, "%d/%m/%Y").date()


cwd = os.getcwd()

directory = cwd + '\\'

delheadfiles = ['USR02', 'USR06']

for delheadfile in delheadfiles:   
    for file in os.listdir(directory):
        if file.endswith(delheadfile + "_FINAL.csv"):       
            data = pd.read_csv(directory + delheadfile +  '_FINAL.csv', sep=",", low_memory=False, encoding='latin-1')
            data['GLTGB'].apply(parseDT)
            print(data)
            data.to_csv(directory + delheadfile +'_FINAL.csv', sep=',', index=False)

标签: pythonpython-3.xpandascsv

解决方案


采用to_datetime

前任:

import pandas as pd

df = pd.DataFrame({"GLTGB": ["00/00/0000", "10/02/2019"]})
print(pd.to_datetime(df['GLTGB'], dayfirst=True, errors='coerce').fillna("Error"))

输出:

0                  Error
1    2019-02-10 00:00:00
Name: GLTGB, dtype: object

推荐阅读