Создать новый столбец с суммой месяца до даты панды - PullRequest
0 голосов
/ 21 марта 2019

Попытка создать новый столбец, который является суммой даты [Дата покупки] с другим столбцом, который содержит количество месяцев [Mainte3].

df['Purchase date'] = pd.to_datetime(df['Purchase date'], format='%m/%d/%Y').dt.strftime('%Y-%m-%d') #pass column to a date and then change format

df['New Date'] = df.apply(lambda x: x['Purchase date'] + pd.DateOffset(months = x['Mainte3']), axis=1)

df["Purchase date"].dtypes
object
df["Mainte3"].dtypes
float64

Таблица имеет следующий формат: таблицаsnip

Но я получаю сообщение об ошибке:

    if any(x is not None and x != int(x) for x in (years, months)):
ValueError: ('cannot convert float NaN to integer', 'occurred at index 0')

Любая помощь приветствуется.Спасибо.

1 Ответ

0 голосов
/ 21 марта 2019

Существует проблема возможных пропущенных значений, поэтому отфильтруйте не пропущенные строки по DataFrame.notna с помощью DataFrame.all для проверки, если все значения равны True с на строки:

rng = pd.date_range('2017-04-03', periods=10)
df = pd.DataFrame({'Purchase date': rng, 'Mainte3': range(10)})  
df.iloc[0, 1] = np.nan
df.iloc[3, 0] = np.nan
print (df)
  Purchase date  Mainte3
0    2017-04-03      NaN
1    2017-04-04      1.0
2    2017-04-05      2.0
3           NaT      3.0
4    2017-04-07      4.0
5    2017-04-08      5.0
6    2017-04-09      6.0
7    2017-04-10      7.0
8    2017-04-11      8.0
9    2017-04-12      9.0

#with real data remove strftime 
#df['Purchase date'] = pd.to_datetime(df['Purchase date'], format='%m/%d/%Y')

mask = df[['Purchase date','Mainte3']].notna().all(axis=1)
df.loc[mask, 'New Date'] = df[mask].apply(lambda x: x['Purchase date'] + 
                                          pd.DateOffset(months = x['Mainte3']), axis=1)
print (df)
  Purchase date  Mainte3   New Date
0    2017-04-03      NaN        NaT
1    2017-04-04      1.0 2017-05-04
2    2017-04-05      2.0 2017-06-05
3           NaT      3.0        NaT
4    2017-04-07      4.0 2017-08-07
5    2017-04-08      5.0 2017-09-08
6    2017-04-09      6.0 2017-10-09
7    2017-04-10      7.0 2017-11-10
8    2017-04-11      8.0 2017-12-11
9    2017-04-12      9.0 2018-01-12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...