Ok j'essaie de diviser une cellule en un csv et de prendre la seconde moitié des informations et de les ajouter aux données d'une autre cellule. je peux diviser la cellule, mais les données que je veux disparaissent.

Ce code fonctionne pour diviser les cellules

import pandas as pd

data = pd.read_csv("/root/v-unit/calendar_data.csv")


data["Start"]= data["Start"].str.split("T",n =1, expand = True)
data["End"]= data["End"].str.split("T",n =1, expand = True)

print data
csvOut = "/root/v-unit/test-data.csv"
f=open(csvOut, 'a')
data[:65534].to_csv(f, index=False, header=True)

Donc le format de la date est 2019-03-04T00: 00: 00 j'ai divisé la colonne au T pour le moment. Je veux ensuite prendre l'horodatage et l'ajouter à une autre ligne qui contient la tâche afin qu'elle s'affiche comme: une tâche 12:00 1:00 dans une cellule puis les dates dans les autres cellules (ce qu'elles font déjà quand je exécutez le code ci-dessus mais l'horodatage disparaît donc je ne peux pas le fusionner)

1
stcoyle 14 mars 2019 à 20:48

2 réponses

Meilleure réponse

Presque la même chose que vous l'avez fait, mais lorsque vous divisez avec expand, il renvoie 2 colonnes, vous devez donc avoir également 2 colonnes en affectation (comme data[['StartDate', 'StartTime']] = ...):

data = pd.DataFrame({'Start': ['2019-03-04T00:00:00'],
                     'End':   ['2019-03-04T10:00:00']})

data[['Start', 'StartTime']] = data["Start"].str.split("T", n=1, expand = True)
data[['End', 'EndTime']] = data["End"].str.split("T", n=1, expand = True)

print(data)

Production:

        Start         End StartTime   EndTime
0  2019-03-04  2019-03-04  00:00:00  10:00:00

Remarque: si vous souhaitez simplement ajouter des heures de début et de fin au nom de votre tâche, vous n'avez même pas besoin de diviser les dates. Vous pouvez à la place les convertir avec pd.to_datetime puis les formater avec strftime en '%H:%M' (pour hours:minutes):

data = pd.DataFrame({'Task': 'task 1',
                     'Start': ['2019-03-04T00:00:00'],
                     'End':   ['2019-03-04T10:00:00']})

data['Task'] += ' ' + \
    pd.to_datetime(data['Start']).dt.strftime('%H:%M').astype(str) + ' ' + \
    pd.to_datetime(data['End']).dt.strftime('%H:%M').astype(str)

print(data)

Production:

                 Task                Start                  End
0  task 1 00:00 10:00  2019-03-04T00:00:00  2019-03-04T10:00:00
2
perl 14 mars 2019 à 18:20

Vous devez sélectionner uniquement la deuxième colonne, et vous pouvez le faire efficacement comme ceci:

import pandas as pd

data = pd.DataFrame({'Start': ['2019-03-04T00:00:00'],
                     'End': ['2019-03-04T01:00:00']})

data['Start'] = data['Start'].str.split('T').str[-1] 
data['End'] = data['End'].str.split('T').str[-1] 

print(data)

>       Start       End
> 0  00:00:00  01:00:00
1
Nathaniel 14 mars 2019 à 18:12