Как изменить значение в формат даты и как изменить значение в формат времени

#python #date #data-conversion

#python #Дата #преобразование данных

Вопрос:

У меня есть два столбца, один со значениями, представляющими время, а другой со значениями, представляющими дату (оба значения имеют плавающий тип), у меня есть следующие данные в каждом столбце:

 df['Time'] 
540.0 
630.0
915.0
1730.0
2245.0 

df['Date']
14202.0
14202.0
14203.0
14203.0
  

Мне нужно создать новые столбцы с правильным форматом данных для этих двух столбцов, чтобы иметь возможность анализировать данные с датой и временем в разных столбцах.

Потому ['Time'] что мне нужно преобразовать формат в:

  540.0  =  5h40 OR TO  5.40 am
2245.0  = 22h45 OR TO 10.45 pm
  

Для ['Date'] мне нужно преобразовать формат в:
Мы можем сказать, что каждое число представляет «дни»:
где 0 («дни») = 01-01-1980

Итак, если я добавлю 01-01-1980 к 14202.0 = 18-11-1938

и если я добавлю: 01-01-1980 14203.0 = 19-11-1938,

этот способ можно сделать с помощью Excel, но мне нужен способ сделать это на Python.

Я пробовал разные типы кода, но ничего не работает, например, один из кодов, который я пробовал, был приведенным ниже:

 # creating a variable with the data in column ['Date'] adding the days into the date:

Time1 = pd.to_datetime(df["Date"])

# When I print it is possible to see that 14203 in row n.55384 is added at the end of the date created but including time, and is not what I want:

print(Time1.loc[[55384]])
55384   1970-01-01 00:00:00.000014203
Name: Date, dtype: datetime64[ns]

# printing the same row (55384) to check the value 14203.0, that was added above:

print(df["Date"].loc[[55384]])
55384    14203.0
Name: Date, dtype: float64
  

Поскольку ['Time'] у меня та же проблема, у меня нет времени без даты, я также попытался вставить ‘:’, но не работает даже преобразование типа данных в строку.

Я надеюсь, что кто-нибудь сможет мне помочь в этом вопросе, и любые сомнения, пожалуйста, дайте мне знать, иногда это нелегко объяснить.

Комментарии:

1. Переформатируйте вопрос, это слишком болезненный взгляд. Просто используйте один блок для всего вашего кода и опишите свою проблему.

2. Привет @ilamaaa, пожалуйста, посмотрите и посмотрите, лучше ли так или лучше разделить на два разных вопроса?

3. Looks likes превосходит форматы даты и времени, в которых я не эксперт, целесообразно ли использовать pandas read_excel при первоначальном получении данных.

4. Я только что привел пример того, как решить проблему с помощью Excel, чтобы продемонстрировать, какой вывод мне нужен из Python

5. Сначала я импортирую файл Excel в Microsoft SQL server, потому что это большой файл для работы непосредственно из Excel. Я использую ‘df = pd.read_sql_query’ для чтения данных с Sql server. Единственная проблема — найти код, который может делать то, что мне нужно, исходя из даты и времени.

Ответ №1:

что касается преобразования времени:

 # change to integer
tt= [int(i) for i in df['Time']]
# convert to time
time_ = pd.to_datetime(tt,format='%H%M').time
# convert from 24 hour, to 12 hour time format
[t.strftime("%I:%M %p") for t in time_]
  

Комментарии:

1. Я просто ввел ответ для даты и времени. Было сложно решить, но теперь это работает. Проблема заключалась в том, что формат времени или данных не принимался, потому что был не в том формате, который обычно принимает Python, это была моя проблема, но теперь она решена спасибо за помощь.

Ответ №2:

Решение проблем с датой

from datetime import datetime

from datetime import timedelta

startdate_string = "1980/01/01" #определение начальной даты в строковом формате

startdate_object = datetime.strptime(startdate_string, "%Y/%m/%d").date() # изменение даты в формате строки на объект даты с помощью функции strptime

startdate_object # print startdate_object для проверки даты

создание списка для добавления в фрейм данных нового столбца с форматом даты

import math
datenew = []

dates = df['UTS_Date'] # данные из исходного столбца ‘UTS_Date’

for values in dates: # использование оператора if для принятия нулевых значений и добавления их в новый список

if math.isnan(values):

     `datenew.append('NaN')`

    `continue `

`currentdate1 = startdate_object   timedelta(days= float(values))` # add the reference data (startdate_object) to a delta (which is the value in each row of the column)
`datenew.append(str(currentdate1)) ` # converte data into string format and add in the end of the list, removing any word from the list (such: datetime.date)
  

print (len(datenew)) # проверьте длину нового списка datenew, чтобы убедиться, что все строки данных находятся в новом списке

df.insert(3, 'Date', datenew) #создание нового столбца в фрейме данных для формата даты

Ответ №3:

решение проблем со временем

timenew = [] # создание нового списка

times = df['Time'] # переменная times равна столбцу df[‘Time’] фрейма данных

переменная, чтобы найти местоположение времени, которое> = 2400

i = 0

def Normalize_time (val):

 `offset = 0`
`if val >= 2400:`
    `offset = 1 ` 
# converting val into integer, to remove decimal places
hours = int(val / 100)
# remove hours and remain just with minutes
minutes = int(val) - hours * 100 
# to convert every rows above 24h
hours = (hours%23) - offset 
# zfill recognizes that it must have two characters (in this case) for hours and minutes 
# and if there aren't enough characters,
# it will add by padding zeros on the left until reaching the number of characters in the argument
return str(hours).zfill(2)   ':'   str(minutes).zfill(2) 
  

создание инструкции for для добавления всех значений в новый список, используя ‘function Normalize_time()’

for values in times: # использование оператора if для принятия нулевых значений и добавления их в новый список if math.isnan(values):

     `timenew.append('NaN')  `
   ` continue `
# using values into the function 'Normalize_time()'
timestr = Normalize_time(values)
# appending each value in the new list
timenew.append(timestr)
  

print(len(timenew)) # проверьте длину нового списка timenew, чтобы убедиться, что все строки данных находятся в новом списке

df.insert(4, 'ODTime', timenew) #создание нового столбца во фрейме данных