Замена значений в строке на NaN - PullRequest
0 голосов
/ 25 мая 2019

Столкнулся с простой задачей, но не могу решить.В df есть таблица:

Date       X1   X2
02.03.2019  2   2
03.03.2019  1   1
04.03.2019  2   3
05.03.2019  1   12
06.03.2019  2   2
07.03.2019  3   3
08.03.2019  4   1
09.03.2019  1   2

И мне нужно для строк где Дата <05.03.2019 установить X1 = NaN, X2 = NaN: </p>

Date       X1   X2
02.03.2019  NaN NaN
03.03.2019  NaN NaN
04.03.2019  NaN NaN
05.03.2019  1   12
06.03.2019  2   2
07.03.2019  3   3
08.03.2019  4   1
09.03.2019  1   2

Ответы [ 2 ]

3 голосов
/ 25 мая 2019

Сначала преобразуйте столбец Date в дату и время, затем установите значения на DataFrame.loc:

df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y')

df.loc[df['Date'] < '2019-03-05', ['X1','X2']] = np.nan
print (df)
        Date   X1    X2
0 2019-03-02  NaN   NaN
1 2019-03-03  NaN   NaN
2 2019-03-04  NaN   NaN
3 2019-03-05  1.0  12.0
4 2019-03-06  2.0   2.0
5 2019-03-07  3.0   3.0
6 2019-03-08  4.0   1.0
7 2019-03-09  1.0   2.0

Если есть DatetimeIndex:

df.index = pd.to_datetime(df.index, format='%d.%m.%Y')

#change datetime to 2019-03-04
df.loc[:'2019-03-04'] = np.nan
print (df)
             X1    X2
Date                 
2019-03-02  NaN   NaN
2019-03-03  NaN   NaN
2019-03-04  NaN   NaN
2019-03-05  1.0  12.0
2019-03-06  2.0   2.0
2019-03-07  3.0   3.0
2019-03-08  4.0   1.0
2019-03-09  1.0   2.0

Или:

df.index = pd.to_datetime(df.index, format='%d.%m.%Y')

df.loc[df.index < '2019-03-05'] = np.nan
2 голосов
/ 25 мая 2019

Не используйте это решение, это просто другой возможный подход (-: ( это повлияет на все столбцы )

df.mask(df.Date < '05.03.2019').combine_first(df[['Date']])

         Date   X1    X2
0  02.03.2019  NaN   NaN
1  03.03.2019  NaN   NaN
2  04.03.2019  NaN   NaN
3  05.03.2019  1.0  12.0
4  06.03.2019  2.0   2.0
5  07.03.2019  3.0   3.0
6  08.03.2019  4.0   1.0
7  09.03.2019  1.0   2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...