Объединить и манипулировать двумя столбцами как дата, используя PANDAS

1

У меня есть файл csv и чтение его через pandas:

cols=['DATE(GMT)','TIME(GMT)',DATASET]
df=pd.read_csv('datasets.csv', usecols=cols)

Содержимое csv файла выглядит следующим образом:

DATE(GMT)   TIME(GMT)   DATASET
05-01-2018     0          10
05-01-2018     1          15
05-01-2018     2          21
05-01-2018     3          9
05-01-2018     4          25
05-01-2018     5          7
   ...        ...        ...
05-02-2018     14         65  

Теперь мне нужно объединить "DATE (GMT)", "TIME (GMT)" в качестве одного столбца DateTime. Чтобы я мог иметь только два столбца, то есть DATETIME и DATASET

  • 0
    df['DATETIME '] = df['DATE(GMT)'].astype(str) + " " +df['TIME(GMT)'].astype(str) ?
  • 0
    TIME(GMT) столбец в hour с? Или second с?
Показать ещё 2 комментария
Теги:
pandas
datetime

1 ответ

0

Вы можете добавить параметр parse_dates в red_csv для столбца datetime:

df = pd.read_csv('datasets.csv', usecols=cols, parse_dates=['DATE(GMT)'])

print (df.dtypes)
DATE(GMT)    datetime64[ns]
TIME(GMT)             int64
DATASET               int64
dtype: object

А затем добавьте столбец времени, преобразованный to_timedelta:

df['DATE(GMT)'] += pd.to_timedelta(df.pop('TIME(GMT)').astype(str), unit='H')
print (df)
            DATE(GMT)  DATASET
0 2018-05-01 00:00:00       10
1 2018-05-01 01:00:00       15
2 2018-05-01 02:00:00       21
3 2018-05-01 03:00:00        9
4 2018-05-01 04:00:00       25
5 2018-05-01 05:00:00        7
6 2018-05-02 14:00:00       65

РЕДАКТИРОВАТЬ:

Существует проблема, что некоторые данные не являются числовыми:

print (df)
    DATE(GMT) TIME(GMT)  DATASET
0  05-01-2018         0       10
1  05-01-2018         1       15
2  05-01-2018         2       21
3  05-01-2018         3        9
4  05-01-2018         4       25
5  05-01-2018         s        7
6  05-02-2018         a       65

Вы можете найти его:

print (df[pd.to_numeric(df['TIME(GMT)'], errors='coerce').isnull()])
    DATE(GMT) TIME(GMT)  DATASET
5  05-01-2018         s        7
6  05-02-2018         a       65

И тогда, если нужно вернуть его на 0 (со всеми отсутствующими значениями):

df['TIME(GMT)'] = pd.to_numeric(df['TIME(GMT)'], errors='coerce').fillna(0)
print (df)
    DATE(GMT)  TIME(GMT)  DATASET
0  05-01-2018        0.0       10
1  05-01-2018        1.0       15
2  05-01-2018        2.0       21
3  05-01-2018        3.0        9
4  05-01-2018        4.0       25
5  05-01-2018        0.0        7
6  05-02-2018        0.0       65
  • 0
    Я получил эту ошибку при попытке: ufunc add не может использовать операнды с типами dtype ('S12') и nad dtype ('<m8 [ns]')
  • 0
    @utyagi - Пожалуйста, проверьте полученный ответ.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню