2017-01-06 21 views
1

入力データは、日付がAM/PMでフォーマットされたCSVファイルから取得され、次にcsvをsqliteデータベーステーブルにエクスポートするためにPandasライブラリが使用されます。12時間形式を24時間Pythonに変換

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) 

私はほとんどのデータを削除し、最も関連を保ったが、一言で言えば、これは私の現在の入力と必要な出力

INPUT 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 
+1

[datetime.strptimeを使用して期間(AM/PM)を計算するにはどうすればいいですか?](http://stackoverflow.com/questions/1759455/how-can-i-account-for-period-am- pm-with-datetime-strptime) –

+0

これらの日付にAMまたはPMはどのように表示されますか?それは、その情報を読むための日付のパーサを設定することの単なる質問です。 –

+0

@MartijnPieters:CSVの日付は、 '2017/01/05 7:43:25 PM'の形式です。この質問がばかげている場合は申し訳ありません。私はしばらくの間Pythonを使用しましたが、私は主にC#を使用するので頻繁には行いません。 – Elmar

答えて

2

だけdatetime parsing options availableを参照して、日付を解析するためにpandas.read_csv()を教えてください。

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 
+0

完璧に動作します! parse_dates = trueを変更すると、parse_dates = [1]がトリックを行いました。 お時間をいただきありがとうございます。ほんとうにありがとう。 – Elmar

0

あなたは、これはこれは、出力

14として以下を与えるだろう

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 

を成し遂げるためにdatetime型のパッケージを使用することができます。 35

1900-01-01 14:35:00

関連する問題