私は次の日付を持っていて、次のコードを試しました、
df['start_date_time'] = ["2016-05-19 08:25:00","2016-05-19 16:00:00","2016-05-20 07:45:00","2016-05-24 12:50:00","2016-05-25 23:00:00","2016-05-26 19:45:00"]
df['start_date_time'] = pd.to_datetime([df['start_date_time']).replace(second = 0)
次のエラーが発生します。
TypeError: replace() got an unexpected keyword argument 'second'
出力に必要な場合の解決策datetimes:
df = pd.DataFrame({'start_date_time': ["2016-05-19 08:25:23","2016-05-19 16:00:45"]})
df['start_date_time'] = pd.to_datetime(df['start_date_time'])
print (df)
start_date_time
0 2016-05-19 08:25:23
1 2016-05-19 16:00:45
Series.dt.floor
分単位で使用T
またはMin
:
df['start_date_time'] = df['start_date_time'].dt.floor('T')
df['start_date_time'] = df['start_date_time'].dt.floor('Min')
最初にnumpy values
に変換し、次にseconds
を<M8[m]
にキャストすることで切り捨てることができますが、この解決策は可能なタイムゾーンを削除します。
df['start_date_time'] = df['start_date_time'].values.astype('<M8[m]')
print (df)
start_date_time
0 2016-05-19 08:25:00
1 2016-05-19 16:00:00
別の解決策は、_ timedelta
からsecond
シリーズを作成し、減算することです。
print (pd.to_timedelta(df['start_date_time'].dt.second, unit='s'))
0 00:00:23
1 00:00:45
Name: start_date_time, dtype: timedelta64[ns]
df['start_date_time'] = df['start_date_time'] -
pd.to_timedelta(df['start_date_time'].dt.second, unit='s')
print (df)
start_date_time
0 2016-05-19 08:25:00
1 2016-05-19 16:00:00
タイミング:
df = pd.DataFrame({'start_date_time': ["2016-05-19 08:25:23","2016-05-19 16:00:45"]})
df['start_date_time'] = pd.to_datetime(df['start_date_time'])
#20000 rows
df = pd.concat([df]*10000).reset_index(drop=True)
In [28]: %timeit df['start_date_time'] = df['start_date_time'] - pd.to_timedelta(df['start_date_time'].dt.second, unit='s')
4.05 ms ± 130 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [29]: %timeit df['start_date_time1'] = df['start_date_time'].values.astype('<M8[m]')
1.73 ms ± 117 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [30]: %timeit df['start_date_time'] = df['start_date_time'].dt.floor('T')
1.07 ms ± 116 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [31]: %timeit df['start_date_time2'] = df['start_date_time'].apply(lambda t: t.replace(second=0))
183 ms ± 19.7 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
必要な場合のソリューションstrings出力の日時の表現
Series.dt.strftime
を使用:
print(df['start_date_time'].dt.strftime('%Y-%m-%d %H:%M'))
0 2016-05-19 08:25
1 2016-05-19 16:00
Name: start_date_time, dtype: object
必要に応じて、:00
を秒に設定します。
print(df['start_date_time'].dt.strftime('%Y-%m-%d %H:%M:00'))
0 2016-05-19 08:25:00
1 2016-05-19 16:00:00
Name: start_date_time, dtype: object
pd.to_datetime
は、属性としてdatetime
を持つsecond
オブジェクトを返します。これについてできることはあまりありません。 second
を0
に設定できますが、属性はここにあり、標準表現には末尾に':00'
が含まれます。
replace
の各要素にdf
を適用する必要があります:
import pandas as pd
df = pd.DataFrame({'start_date_time': ["2016-05-19 08:25:23","2016-05-19 16:00:45","2016-05-20 07:45:00","2016-05-24 12:50:00","2016-05-25 23:00:00","2016-05-26 19:45:00"]})
df['start_date_time'] = pd.to_datetime(df['start_date_time'])
df['start_date_time'] = df['start_date_time'].apply(lambda t: t.replace(second=0))
print(df)
# start_date_time
# 0 2016-05-19 08:25:00
# 1 2016-05-19 16:00:00
# 2 2016-05-20 07:45:00
# 3 2016-05-24 12:50:00
# 4 2016-05-25 23:00:00
# 5 2016-05-26 19:45:00
:23
と:45
は、最初から:00
に置き換えられましたが、引き続き印刷されます。
':00'
を削除しますそれらの時間の文字列表現だけが必要で、文字列の最後の':00'
を削除するためにdatetime
オブジェクトへの文字列のみを解析する場合は、最後の3文字を削除できます。
>>> "2016-05-19 08:25:00"[:-3]
'2016-05-19 08:25'
df['start_date_time']
を初期化する前に、これをリストのすべての要素に適用できます。
>>> start_date_time = ["2016-05-19 08:25:00","2016-05-19 16:00:00","2016-05-20 07:45:00","2016-05-24 12:50:00","2016-05-25 23:00:00","2016-05-26 19:45:00"]
>>> map(lambda s: s[:-3], start_date_time)
['2016-05-19 08:25', '2016-05-19 16:00', '2016-05-20 07:45', '2016-05-24 12:50', '2016-05-25 23:00', '2016-05-26 19:45']
datetime
オブジェクトを操作したいが秒を表示したくない場合:
print(df['start_date_time'].apply(lambda t: t.strftime('%Y-%m-%d %H:%M')))
# 0 2016-05-19 08:25
# 1 2016-05-19 16:00
# 2 2016-05-20 07:45
# 3 2016-05-24 12:50
# 4 2016-05-25 23:00
# 5 2016-05-26 19:45
# Name: start_date_time, dtype: object
HTMLコード:
<input type = "time" class = "form-control" value = "" name = "meeting_time"が必要/>
Python Djangoコード:
meeting_time = request.POST ['meeting_time'] #Like your_time = "12:35:00"
get_time = meeting_time.strftime( "%H:%M")
結果は:
get_time = "12:35"
これを試してみてください:
df.index = df.index.map(lambda t: t.strftime('%Y-%m-%d %H:%M'))
コメントの1つに書かれているように、上記は日付が文字列でない場合に適用されます。ただし、文字列の場合は、リストの各リストの最後の3文字を単純にスライスできます。
import pandas as pd
df = pd.DataFrame({'date': ["2016-05-19 08:25:00"]})
print(df['date'].map(lambda t: t[:-3]))
上記は出力します:
0 2016-05-19 08:25 Name: date, dtype: object
最初に文字列をdatetimeオブジェクトに変換してから、replaceメソッドを使用できます。
from _datetime import *
df = dict()
df['start_date_time'] = ["2016-05-19 08:25:00",
"2016-05-19 16:00:00",
"2016-05-20 07:45:00",
"2016-05-24 12:50:00",
"2016-05-25 23:00:00",
"2016-05-26 19:45:00"]
for dt in df['start_date_time']:
cur_dt = datetime.strptime(dt, '%Y-%m-%d %H:%M:%S')
cur_dt = cur_dt.replace(second=0)
print(cur_dt)
cur_dt_without_second = cur_dt.strftime('%Y-%m-%d %H:%M')
print(cur_dt_without_second)
-------------------
2016-05-19 08:25:00
2016-05-19 08:25
2016-05-19 16:00:00
2016-05-19 16:00
2016-05-20 07:45:00
2016-05-20 07:45
2016-05-24 12:50:00
2016-05-24 12:50
2016-05-25 23:00:00
2016-05-25 23:00
2016-05-26 19:45:00
2016-05-26 19:45
Timedeltaを使用して秒を減算できます。
import datetime
d = datetime.datetime.now() #datetime including seconds
without_seconds = d - datetime.timedelta(seconds=d.second)
文字列をdatetimeオブジェクトに変換してから操作する
>>> x = ["2016-05-19 08:25:00","2016-05-19 16:00:00","2016-05-20 07:45:00","2016-05-24 12:50:00","2016-05-25 23:00:00","2016-05-26 19:45:00"]
>>> for i in x:
... y = datetime.datetime.strptime(i, '%Y-%m-%d %H:%M:%S')
... z = datetime.datetime.strftime(y, '%Y-%m-%d %H:%M')
... print (y, type(y))
... print (z, type(z))
...
(datetime.datetime(2016, 5, 19, 8, 25), <type 'datetime.datetime'>)
('2016-05-19 08:25', <type 'str'>)
(datetime.datetime(2016, 5, 19, 16, 0), <type 'datetime.datetime'>)
('2016-05-19 16:00', <type 'str'>)
(datetime.datetime(2016, 5, 20, 7, 45), <type 'datetime.datetime'>)
('2016-05-20 07:45', <type 'str'>)
(datetime.datetime(2016, 5, 24, 12, 50), <type 'datetime.datetime'>)
('2016-05-24 12:50', <type 'str'>)
(datetime.datetime(2016, 5, 25, 23, 0), <type 'datetime.datetime'>)
('2016-05-25 23:00', <type 'str'>)
(datetime.datetime(2016, 5, 26, 19, 45), <type 'datetime.datetime'>)
('2016-05-26 19:45', <type 'str'>)
あなたが削除したと述べたので、私はあなたが結果に秒またはマイクロ秒を望まないことを仮定しました。これが事実である場合、次のことが役立つかもしれません:
datetime_variable.strftime("'%Y-%m-%d %H:%M'")
文字列に日付時刻がある場合は、日付時刻objに変換できます。
_
from dateutil import parser
_
datetime_variable = parser.parse(str_datetime_var)
datetime_variable.strftime("'%Y-%m-%d %H:%M'")