Заменить год в кадре данных pandas переменной формата Timestamp - PullRequest
0 голосов
/ 26 сентября 2018

Я создал следующее df со следующим кодом:

df = pd.read_table('https://raw.githubusercontent.com/guipsamora/pandas_exercises/master/06_Stats/Wind_Stats/wind.data', sep = "\s+", parse_dates = [[0,1,2]]) 

Если мы выполним следующую команду:

type(df['Yr_Mo_Dy'][0])

Мы увидим, что наблюдения под ['Yr_Mo_Dy'] имеют формат pandas._libs.tslibs.timestamps.Timestamp.

Я пытаюсь сделать следующее: всякий раз, когда я вижу год> = 2061 (['Yr_Mo_Dy']), я хочу вычесть -100, в противном случае я просто продолжаюгод и продолжить с итерации.

Я попробовал следующий код:

for i in list(range(df.shape[0])):
    # assign all the observations under df['Yr_Mo_Dy'] to ts
    ts = df['Yr_Mo_Dy'][i]

    if df['Yr_Mo_Dy'][i].year >=2061:
        # replace the year in ts by year - 100
        ts.replace(year=df['Yr_Mo_Dy'][i].year - 100)
    else:
        continue

Но цикл ничего не делает.Я чувствую, что это как-то связано с присваиванием переменной ts = df['Yr_Mo_Dy'][i].но я не могу придумать другой способ сделать это.

Я пытаюсь назначить переменную после каждой итерации цикла, учитывая ответ, который я увидел в в этом посте .

1 Ответ

0 голосов
/ 26 сентября 2018

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

В этом случае вы можете использовать numpy.where для создания условного ряда:

df = pd.DataFrame({'A': pd.to_datetime(['2018-01-01', '2080-11-30',
                                        '1955-04-05', '2075-10-09'])})

df['B'] = np.where(df['A'].dt.year >= 2061,
                   df['A'] - pd.DateOffset(years=100), df['A'])

print(df)

           A          B
0 2018-01-01 2018-01-01
1 2080-11-30 1980-11-30
2 1955-04-05 1955-04-05
3 2075-10-09 1975-10-09
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...