Я получаю NaN, когда вычитаю два столбца панд данных - PullRequest
0 голосов
/ 28 марта 2019

У меня есть фрейм данных с несколькими столбцами, я хочу получить разницу во времени между двумя столбцами, содержащими время.Для начала я преобразовал два столбца в объекты DateTime, используя pd.to_datetime, но когда я вычел два столбца и присвоил результат новому столбцу, в итоге получились значения NaN.

ops_data_clean_1.loc['Package committed-time'] = 
pd.to_datetime(ops_data_clean_1['Package committed-time'])
ops_data_clean_1.loc['Flight launched-time'] = 
pd.to_datetime(ops_data_clean_1['Flight launched-time'])
ops_data_clean_1['time_to_launch'] = ops_data_clean_1.loc['Flight 
launched-time'] - ops_data_clean_1.loc['Package committed-time']
ops_data_clean_1.head()

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Я думаю, что ваша проблема заключается в использовании loc, когда вы обращаетесь только к столбцу из фрейма данных.Вы можете устранить проблему, просто удалив loc из кода.

См. Следующий пример игрушки:

ops_data_clean_1 = pd.DataFrame()

ops_data_clean_1['Package committed-time'] = ['2018-01-01 00:00:30', '2018-01-01 00:49:00', '2018-03-01 00:00:45']
ops_data_clean_1['Flight launched-time'] = ['2018-01-01 01:00:30', '2018-01-01 02:49:00', '2018-03-01 00:54:45']

ops_data_clean_1['Package committed-time'] = pd.to_datetime(ops_data_clean_1['Package committed-time'])
ops_data_clean_1['Flight launched-time'] = pd.to_datetime(ops_data_clean_1['Flight launched-time'])

ops_data_clean_1['time_to_launch'] = ops_data_clean_1['Flight launched-time'] - ops_data_clean_1['Package committed-time']

ops_data_clean_1.head()

# Output

Package committed-time  Flight launched-time    time_to_launch
0   2018-01-01 00:00:30 2018-01-01 01:00:30 01:00:00
1   2018-01-01 00:49:00 2018-01-01 02:49:00 02:00:00
2   2018-03-01 00:00:45 2018-03-01 00:54:45 00:54:00

Если вы хотите использовать loc, вам нужно выбрать всестроки кадра данных, используя : Например, ops_data_clean_1.loc[:, 'Flight launched-time']

Тогда код становится,

ops_data_clean_1 = pd.DataFrame()

ops_data_clean_1['Package committed-time'] = ['2018-01-01 00:00:30', '2018-01-01 00:49:00', '2018-03-01 00:00:45']
ops_data_clean_1['Flight launched-time'] = ['2018-01-01 01:00:30', '2018-01-01 02:49:00', '2018-03-01 00:54:45']

ops_data_clean_1.loc[:, 'Package committed-time'] = pd.to_datetime(ops_data_clean_1['Package committed-time'])
ops_data_clean_1.loc[:, 'Flight launched-time'] = pd.to_datetime(ops_data_clean_1['Flight launched-time'])

ops_data_clean_1['time_to_launch'] = ops_data_clean_1.loc[:, 'Flight launched-time'] - ops_data_clean_1.loc[:, 'Package committed-time']

ops_data_clean_1.head()

# Output

    Package committed-time  Flight launched-time    time_to_launch
0   2018-01-01 00:00:30 2018-01-01 01:00:30 01:00:00
1   2018-01-01 00:49:00 2018-01-01 02:49:00 02:00:00
2   2018-03-01 00:00:45 2018-03-01 00:54:45 00:54:00
1 голос
/ 28 марта 2019

Я думаю, что ваша проблема заключается в используемой вами функции .loc.

.loc ['Package Commit-time'] в основном говорит, выберите ROW, которые имеют значение 'Package Commit-time', которых нет.

Но вы хотите выбрать столбец с таким именем.Используйте простой ops_data_clean_1 ['Package commit-time'] для доступа к столбцу или ops_data_clean_1.loc [:, 'Package commit-time']

Подробнее о .loc здесь: введите описание ссылки здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...