输入数据来自CSV文件,其中日期格式为AM / PM,然后Pandas库用于将csv导出到sqlite数据库表。
是否有任何优雅的解决方案或内置函数用于python 2.7或3将这12小时日期转换为24小时格式,最好是在它们写入数据库之前?我需要它来比较将导入数据库的日期。
使用以下代码:
import pandas as pd
import datetime as dt
from sqlite3 import connect
from glob import iglob
from os.path import splitext, basename
dbName = 'logs'
logsDir = 'event_logs'
def csvToDb(db, filename):
conn = connect(db)
df = pd.read_csv(filename,encoding='utf-8')
df.to_sql(splitext(basename(filename))[0], conn)
conn.close()
def csvLogsToDb(directory):
for filename in iglob(directory + '/*.csv'):
print('WRITING TO DB | ' + filename)
csvToDb(dbName, filename)
print("DONE")
if __name__ == "__main__":
csvLogsToDb(logsDir)
我删除了大部分数据并保持最相关,但简而言之,这是我当前的输入和所需的输出
输入CSV数据:
Level,DateTime
Information,2017/01/06 9:06:02 AM
Information,2017/01/06 9:02:44 AM
Information,2017/01/06 8:56:48 PM
CURRENT OUTPUT
COL1
Information
Information
Information
COL2
2017/01/06 9:06:02 AM
2017/01/06 9:02:44 AM
2017/01/06 8:56:48 PM
预期输出
COL1
Information
Information
Information
COL2
2017-01-06 09:06:02
2017-01-06 09:02:44
2017-01-06 20:56:48
答案 0 :(得分:2)
告诉pandas.read_csv()
解析日期,请参阅datetime parsing options available。
dateutil.parser
默认解析器可以处理开箱即用的AM / PM时间。将parse_dates
选项设置为要解析的列索引列表。对于您的示例输入,该列为1
列:
>>> import pandas
>>> from io import BytesIO
>>> data = BytesIO(b'''\
... Level,DateTime
... Information,2017/01/06 9:06:02 AM
... Information,2017/01/06 9:02:44 AM
... Information,2017/01/06 8:56:48 PM
... ''')
>>> pandas.read_csv(data, parse_dates=[1])
Level DateTime
0 Information 2017-01-06 09:06:02
1 Information 2017-01-06 09:02:44
2 Information 2017-01-06 20:56:48
答案 1 :(得分:0)
您可以使用datetime包来完成此任务
from datetime import datetime
data = '2:35 PM'
standard_time_format = datetime.strptime(data, "%I:%M %p")
only_in_24_hour_format = datetime.strftime(standard_time_format, "%H:%M")
print only_in_24_hour_format
print standard_time_format
这会将以下内容作为输出
14时35分
1900-01-01 14:35:00