Я пытаюсь создать новый столбец в фрейме данных pandas, вычислив значение из существующих столбцов.
У меня есть 3 существующих столбца ("launched_date", "item_published_at", "item_created_at")
Однако мой оператор «if row[column_name] not None:» разрешает столбцы со значением NaN и не переходит к следующему оператору.
В приведенном ниже коде я бы не ожидал, что значение «нан» будет напечатано после первого условного выражения, я бы ожидал что-то вроде «2018-08-17».
df['adjusted_date'] = df.apply(lambda row: adjusted_date(row), axis=1)
def adjusted_launch(row):
if row['launched_date']is not None:
print(row['launched_date'])
exit()
adjusted_date = date_to_time_in_timezone(row['launched_date'])
elif row['item_published_at'] is not None:
adjusted_date = row['item_published_at']#make datetime in PST
else:
adjusted_date = row['item_created_at'] #make datetime in PST
return adjusted_date
Как я могу правильно структурировать этот условный оператор?






Сначала заполните «нан» как строку, где данные пусты.
df.fillna("nan",inplace=True)
Затем в функции вы можете применить условие, например:
def adjusted_launch(row):
if row['launched_date'] !='nan':
......
import numpy as np
df.fillna(np.nan,inplace=True)
#suggested by @ShadowRanger
def funct(row):
if row['col'].notnull():
pass
@ShadowRanger Я обновил ответ с вашим предложением
df = df.where((pd.notnull(df)), None)
Это заменит все nans на None, никаких других модификаций не требуется.
Или просто измените тест на использовать
pandas.isnull/pandas.notnull, не изменяя исходный фрейм данных.