python - 当它们在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)
解决方案
采用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
推荐阅读
- react-native - 图像和图像屏幕截图的不同结果
- c++ - 自定义 QVector 类的 Qt LNK2019 问题
- python - 如何将 Spyder 中的编码更改为 UTF-8?
- vivado - vivado hls中的以下代码有什么问题?
- html - 如何使旋转木马工作?
- java - 带有片段的 Android Studio 导航抽屉。工具栏隐藏在下一个片段活动或页面中
- rust - 在 flat_map 中返回不同类型的迭代器
- javascript - 传单 geojsos,使用 Ajax 更新制造商,如何在重新添加之前删除所有标记?
- python - 仅将单个元素保存到 ManyToManyField
- java - 使用 Spring WebSockets 更新 MySQL 数据库