Пример фрейма данных:
id col1 col2
0 Bob 2018-11-29 TO 2018-11-30 2018-12-01 TO 2018-12-31
1 James 2018-10-19 TO 2018-10-31 NaT
2 Jane 2018-04-05 TO 2018-07-12 2018-11-29 TO 2018-11-30
У меня есть два столбца, в которых диапазоны дат отображаются следующим образом:
"2018-11-29 TO 2018-11-30"
Я успешно извлек каждую дату из первого столбца в два новых столбца, например::
def my_func(data):
dates = data.split(" TO ")
dt1 = pd.to_datetime(dates[0].strip(), format="%Y-%m-%d")
dt2 = pd.to_datetime(dates[1].strip(), format="%Y-%m-%d")
return (dt1, dt2)
df[["new_col_1", "new_col_2"]] = df.apply(lambda row: pd.Series(my_func(row["col1"])), axis=1)
В «col1» это работало нормально, потому что у каждой строки есть значение.Однако в «col2» не каждая строка имеет значение.Я хочу пропустить эти строки, но это не работает.Я попытался использовать pd.notnull()
с условной логикой в лямбда-выражении, но я думаю, что pd.Series()
отбрасывает его, и он все равно пытается передать значения, и я продолжаю получать:
AttributeError: ("'float' object has no attribute 'split'", 'occurred at index 0')
Но фактическоеdtype
столбцов ("col1" и "col2") - это object
(строка), а не с плавающей точкой, поэтому я не уверен, почему он выдает эту ошибку.
Как мне изменить этотак что это работает, но пропускает строки, где этот столбец не имеет значения?