J'ai un dataframe pandas avec les colonnes suivantes;
Date Time
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Comment combiner les données ['Date'] et les données ['Heure'] pour obtenir ce qui suit? Y a-t-il un moyen de le faire en utilisant pd.to_datetime
?
Date
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Réponses:
Il convient de mentionner que vous avez peut-être pu lire ceci directement, par exemple si vous utilisiez
read_csv
usingparse_dates=[['Date', 'Time']]
.En supposant que ce ne sont que des chaînes, vous pouvez simplement les ajouter (avec un espace), ce qui vous permet d'appliquer
to_datetime
:Remarque: étonnamment (pour moi), cela fonctionne bien avec les NaN convertis en NaT, mais cela vaut la peine de s'inquiéter de la conversion (peut-être en utilisant l'
raise
argument).la source
parse_dates=[['Start date', 'Start time'], ['End date', 'End time']])
. Pandas <3La réponse acceptée fonctionne pour les colonnes de type de données
string
. Par souci d'exhaustivité: je rencontre cette question en cherchant comment faire cela lorsque les colonnes sont de types de données: date et heure.la source
time
dtype, chez les pandas. J'ai plutôt untimedelta
(et undatetime
) auquel cas il suffit de les ajouter, voir ma réponsepd.datetime
est obsolète et il est suggéré d'importer explicitement ledatetime
module à la place.Vous pouvez l'utiliser pour fusionner la date et l'heure dans la même colonne de dataframe.
Lecture du fichier .csv avec les colonnes fusionnées Date_Heure:
Vous pouvez également utiliser cette ligne pour conserver les deux autres colonnes.
la source
date_parser
, par exempleparser = lambda date: pd.datetime.strptime(date, '%d-%b-%y %H:%M:%S')
Vous pouvez convertir les colonnes si les types sont différents (datetime et timestamp ou str) et utiliser to_datetime:
Résultat :
Meilleur,
la source
Je n'ai pas assez de réputation pour commenter jka.ne donc:
J'ai dû modifier la ligne de jka.ne pour que cela fonctionne:
Cela pourrait aider les autres.
De plus, j'ai testé une approche différente, en utilisant
replace
au lieu decombine
:ce qui dans le cas du PO serait:
J'ai chronométré les deux approches pour un ensemble de données relativement volumineux (> 500.000 lignes), et elles ont toutes les deux des durées d'exécution similaires, mais l'utilisation
combine
est plus rapide (59s pourreplace
vs 50s pourcombine
).la source
La réponse dépend vraiment de ce que sont vos types de colonnes . Dans mon cas, j'avais
datetime
ettimedelta
.Si tel est votre cas, il vous suffit d'ajouter les colonnes:
la source
datetime
ettimedelta
. La réponse principale consiste en quelque sorte à comprendre que les colonnes étaient des chaînes, ou peut-être que c'était juste la réponse qui a fonctionné pour celle qui a publié la question.Vous pouvez également convertir en
datetime
sans concaténation de chaînes, en combinantdatetime
et destimedelta
objets. Combiné avecpd.DataFrame.pop
, vous pouvez supprimer la série source simultanément:la source
Assurez-vous d'abord d'avoir les bons types de données:
Ensuite, vous les combinez facilement:
la source
Utilisez la
combine
fonction:la source
Mon ensemble de données avait des données de résolution d'une seconde pendant quelques jours et l'analyse par les méthodes suggérées ici était très lente. Au lieu de cela, j'ai utilisé:
Notez que l'utilisation de
cache=True
rend l'analyse des dates très efficace car il n'y a que quelques dates uniques dans mes fichiers, ce qui n'est pas vrai pour une colonne de date et d'heure combinée.la source
LES DONNÉES:
<TICKER>, <PER>, <DATE>, <HEURE> , <OPEN>, <HIGH>, <LOW>, <CLOSE>, <VOL> SPFB.RTS, 1, 20190103,100100 , 106580.0000000,107260.0000000,106570.0000000 , 107230.0000000,3726
CODE:
la source