Ejercicio - Fechas y Horas - Solución
Índice de contenido
Ejercicio
1. Descarga los datos de https://archive.ics.uci.edu/ml/machine-learning-databases/00271/
2. Carga los datos anteriores en un dataframe correctamente formateado. Debe quedar algo así:

3. Crea cuatro nuevas columnas:
- 'Extracted_start_date', que contendrá la fecha extraída de la columna 'Start time'.
- 'Extracted_start_time', que contendrá la hora extraída de la columna 'Start time'.
- 'Extracted_end_date', que contendrá la fecha extraída de la columna 'End time'.
- 'Extracted_end_time', que contendrá la hora extraída de la columna 'End time'.
El dataframe resultante debe quedar de esta manera:

Solución
python
import pandas as pd
python
df = pd.read_csv("OrdonezA_ADLs.txt", sep="\t", skiprows = [1], index_col = None)
df.reset_index(inplace=True)
df
| level_0 | level_1 | level_2 | Start time | End time | Activity | Unnamed: 3 | |
|---|---|---|---|---|---|---|---|
| 0 | 2011-11-28 02:27:59 | NaN | 2011-11-28 10:18:11 | NaN | Sleeping | NaN | NaN |
| 1 | 2011-11-28 10:21:24 | NaN | 2011-11-28 10:23:36 | NaN | Toileting | NaN | NaN |
| 2 | 2011-11-28 10:25:44 | NaN | 2011-11-28 10:33:00 | NaN | Showering | NaN | NaN |
| 3 | 2011-11-28 10:34:23 | NaN | 2011-11-28 10:43:00 | NaN | Breakfast | NaN | NaN |
| 4 | 2011-11-28 10:49:48 | NaN | 2011-11-28 10:51:13 | NaN | Grooming | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 243 | 2011-12-11 12:32:49 | NaN | 2011-12-11 14:26:18 | NaN | Spare_Time/TV | NaN | NaN |
| 244 | 2011-12-11 14:34:12 | NaN | 2011-12-11 15:26:17 | NaN | Lunch | NaN | NaN |
| 245 | 2011-12-11 15:28:59 | NaN | 2011-12-11 15:30:14 | NaN | Toileting | NaN | NaN |
| 246 | 2011-12-11 15:41:34 | NaN | 2011-12-11 15:43:30 | NaN | Grooming | NaN | NaN |
| 247 | 2011-12-11 15:43:51 | NaN | 2011-12-11 21:41:48 | NaN | Spare_Time/TV | NaN | NaN |
248 rows × 7 columns
python
df.columns
Index(['level_0', 'level_1', 'level_2', 'Start time ',
'End time ', 'Activity', 'Unnamed: 3'],
dtype='object')
python
colnames = df.columns.tolist()
colnames
['level_0',
'level_1',
'level_2',
'Start time ',
'End time ',
'Activity',
'Unnamed: 3']
python
cols_to_remove = list()
for name in colnames:
if name.startswith("level"):
cols_to_remove.append(name)
cols_to_remove
['level_0', 'level_1', 'level_2']
python
# Forma extendida
clean_colnames = list()
for name in colnames:
if name not in cols_to_remove:
clean_colnames.append(name)
clean_colnames
['Start time ', 'End time ', 'Activity', 'Unnamed: 3']
python
# Forma condensada
clean_colnames = [name for name in colnames if name not in cols_to_remove]
clean_colnames
['Start time ', 'End time ', 'Activity', 'Unnamed: 3']
python
clean_colnames.remove("Unnamed: 3")
clean_colnames
['Start time ', 'End time ', 'Activity']
python
cadena1 = 'Start time '
python
cadena1.rstrip()
'Start time'
python
clean_colnames = [name.rstrip() for name in clean_colnames]
clean_colnames
['Start time', 'End time', 'Activity']
python
df.dropna(axis = 1, how="all", inplace=True)
df
| level_0 | level_2 | End time | |
|---|---|---|---|
| 0 | 2011-11-28 02:27:59 | 2011-11-28 10:18:11 | Sleeping |
| 1 | 2011-11-28 10:21:24 | 2011-11-28 10:23:36 | Toileting |
| 2 | 2011-11-28 10:25:44 | 2011-11-28 10:33:00 | Showering |
| 3 | 2011-11-28 10:34:23 | 2011-11-28 10:43:00 | Breakfast |
| 4 | 2011-11-28 10:49:48 | 2011-11-28 10:51:13 | Grooming |
| ... | ... | ... | ... |
| 243 | 2011-12-11 12:32:49 | 2011-12-11 14:26:18 | Spare_Time/TV |
| 244 | 2011-12-11 14:34:12 | 2011-12-11 15:26:17 | Lunch |
| 245 | 2011-12-11 15:28:59 | 2011-12-11 15:30:14 | Toileting |
| 246 | 2011-12-11 15:41:34 | 2011-12-11 15:43:30 | Grooming |
| 247 | 2011-12-11 15:43:51 | 2011-12-11 21:41:48 | Spare_Time/TV |
248 rows × 3 columns
python
df.columns = clean_colnames
df
| Start time | End time | Activity | |
|---|---|---|---|
| 0 | 2011-11-28 02:27:59 | 2011-11-28 10:18:11 | Sleeping |
| 1 | 2011-11-28 10:21:24 | 2011-11-28 10:23:36 | Toileting |
| 2 | 2011-11-28 10:25:44 | 2011-11-28 10:33:00 | Showering |
| 3 | 2011-11-28 10:34:23 | 2011-11-28 10:43:00 | Breakfast |
| 4 | 2011-11-28 10:49:48 | 2011-11-28 10:51:13 | Grooming |
| ... | ... | ... | ... |
| 243 | 2011-12-11 12:32:49 | 2011-12-11 14:26:18 | Spare_Time/TV |
| 244 | 2011-12-11 14:34:12 | 2011-12-11 15:26:17 | Lunch |
| 245 | 2011-12-11 15:28:59 | 2011-12-11 15:30:14 | Toileting |
| 246 | 2011-12-11 15:41:34 | 2011-12-11 15:43:30 | Grooming |
| 247 | 2011-12-11 15:43:51 | 2011-12-11 21:41:48 | Spare_Time/TV |
248 rows × 3 columns
python
df.dtypes
Start time object
End time object
Activity object
dtype: object
python
df['Start time'] = pd.to_datetime(df['Start time'])
df['End time'] = pd.to_datetime(df['End time'])
df.dtypes
Start time datetime64[ns]
End time datetime64[ns]
Activity object
dtype: object
python
df['Extracted_start_date'] = df['Start time'].dt.date
df['Extracted_start_time'] = df['Start time'].dt.time
df
| Start time | End time | Activity | Extracted_start_date | Extracted_start_time | |
|---|---|---|---|---|---|
| 0 | 2011-11-28 02:27:59 | 2011-11-28 10:18:11 | Sleeping | 2011-11-28 | 02:27:59 |
| 1 | 2011-11-28 10:21:24 | 2011-11-28 10:23:36 | Toileting | 2011-11-28 | 10:21:24 |
| 2 | 2011-11-28 10:25:44 | 2011-11-28 10:33:00 | Showering | 2011-11-28 | 10:25:44 |
| 3 | 2011-11-28 10:34:23 | 2011-11-28 10:43:00 | Breakfast | 2011-11-28 | 10:34:23 |
| 4 | 2011-11-28 10:49:48 | 2011-11-28 10:51:13 | Grooming | 2011-11-28 | 10:49:48 |
| ... | ... | ... | ... | ... | ... |
| 243 | 2011-12-11 12:32:49 | 2011-12-11 14:26:18 | Spare_Time/TV | 2011-12-11 | 12:32:49 |
| 244 | 2011-12-11 14:34:12 | 2011-12-11 15:26:17 | Lunch | 2011-12-11 | 14:34:12 |
| 245 | 2011-12-11 15:28:59 | 2011-12-11 15:30:14 | Toileting | 2011-12-11 | 15:28:59 |
| 246 | 2011-12-11 15:41:34 | 2011-12-11 15:43:30 | Grooming | 2011-12-11 | 15:41:34 |
| 247 | 2011-12-11 15:43:51 | 2011-12-11 21:41:48 | Spare_Time/TV | 2011-12-11 | 15:43:51 |
248 rows × 5 columns
python
df['Extracted_end_date'] = df['End time'].dt.date
df['Extracted_end_time'] = df['End time'].dt.time
df
| Start time | End time | Activity | Extracted_start_date | Extracted_start_time | Extracted_end_date | Extracted_end_time | |
|---|---|---|---|---|---|---|---|
| 0 | 2011-11-28 02:27:59 | 2011-11-28 10:18:11 | Sleeping | 2011-11-28 | 02:27:59 | 2011-11-28 | 10:18:11 |
| 1 | 2011-11-28 10:21:24 | 2011-11-28 10:23:36 | Toileting | 2011-11-28 | 10:21:24 | 2011-11-28 | 10:23:36 |
| 2 | 2011-11-28 10:25:44 | 2011-11-28 10:33:00 | Showering | 2011-11-28 | 10:25:44 | 2011-11-28 | 10:33:00 |
| 3 | 2011-11-28 10:34:23 | 2011-11-28 10:43:00 | Breakfast | 2011-11-28 | 10:34:23 | 2011-11-28 | 10:43:00 |
| 4 | 2011-11-28 10:49:48 | 2011-11-28 10:51:13 | Grooming | 2011-11-28 | 10:49:48 | 2011-11-28 | 10:51:13 |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 243 | 2011-12-11 12:32:49 | 2011-12-11 14:26:18 | Spare_Time/TV | 2011-12-11 | 12:32:49 | 2011-12-11 | 14:26:18 |
| 244 | 2011-12-11 14:34:12 | 2011-12-11 15:26:17 | Lunch | 2011-12-11 | 14:34:12 | 2011-12-11 | 15:26:17 |
| 245 | 2011-12-11 15:28:59 | 2011-12-11 15:30:14 | Toileting | 2011-12-11 | 15:28:59 | 2011-12-11 | 15:30:14 |
| 246 | 2011-12-11 15:41:34 | 2011-12-11 15:43:30 | Grooming | 2011-12-11 | 15:41:34 | 2011-12-11 | 15:43:30 |
| 247 | 2011-12-11 15:43:51 | 2011-12-11 21:41:48 | Spare_Time/TV | 2011-12-11 | 15:43:51 | 2011-12-11 | 21:41:48 |
248 rows × 7 columns
python
df.drop(columns = ["Start time", "End time"], inplace=True)
df
| Activity | Extracted_start_date | Extracted_start_time | Extracted_end_date | Extracted_end_time | |
|---|---|---|---|---|---|
| 0 | Sleeping | 2011-11-28 | 02:27:59 | 2011-11-28 | 10:18:11 |
| 1 | Toileting | 2011-11-28 | 10:21:24 | 2011-11-28 | 10:23:36 |
| 2 | Showering | 2011-11-28 | 10:25:44 | 2011-11-28 | 10:33:00 |
| 3 | Breakfast | 2011-11-28 | 10:34:23 | 2011-11-28 | 10:43:00 |
| 4 | Grooming | 2011-11-28 | 10:49:48 | 2011-11-28 | 10:51:13 |
| ... | ... | ... | ... | ... | ... |
| 243 | Spare_Time/TV | 2011-12-11 | 12:32:49 | 2011-12-11 | 14:26:18 |
| 244 | Lunch | 2011-12-11 | 14:34:12 | 2011-12-11 | 15:26:17 |
| 245 | Toileting | 2011-12-11 | 15:28:59 | 2011-12-11 | 15:30:14 |
| 246 | Grooming | 2011-12-11 | 15:41:34 | 2011-12-11 | 15:43:30 |
| 247 | Spare_Time/TV | 2011-12-11 | 15:43:51 | 2011-12-11 | 21:41:48 |
248 rows × 5 columns
