Редактировать строки в каждой строке столбца CSV - PullRequest
0 голосов
/ 02 декабря 2018


У меня есть csv со столбцом даты, даты которого указаны как MM / DD / YY, но я хочу изменить годы с 00,02,03 на 1900, 1902, 1903, чтобывместо этого они перечислены как ММ / ДД / ГГГГ

Это то, что работает для меня:

df2['Date'] = df2['Date'].str.replace(r'00', '1900')

, но я должен был бы делать это каждый год до 68 (иначе повторить это68 раз).Я не уверен, как создать цикл для выполнения кода выше для каждого года в этом диапазоне.Я попытался это:

ogyear=00 
newyear=1900 
while ogyear <= 68:
    df2['date']=df2['Date'].str.replace(r'ogyear','newyear')
    ogyear += 1
    newyear += 1

, но это возвращает пустой набор данных.Есть ли другой способ сделать это?

Я не могу использовать datetime, потому что предполагается, что 02 относится к 2002, а не к 1902, и когда я пытаюсь отредактировать это как дату, я получаю сообщение об ошибке от python, в котором говорится, что даты неизменны и что они должны бытьизменено в исходном наборе данных.По этой причине мне нужно сохранить даты в виде строк.Я также приложил CSV здесь на случай, если это будет полезно.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Я бы сделал это следующим образом:

from datetime import datetime

# create a data frame with dates in format month/day/shortened year
d = pd.DataFrame({'dates': ['2/01/10','5/01/20','6/01/30']})

#loop through the dates in the dates column and add them 
#to list in desired form using datetime library,
#then substitute the dataframe dates column with the new ordered list

new_dates = []
for date in list(d['dates']):
    dat = datetime.date(datetime.strptime(date, '%m/%d/%y'))
    dat = dat.strftime("%m/%d/%Y")
    new_dates.append(dat)
new_dates
d['dates'] = pd.Series(new_dates)
d
0 голосов
/ 02 декабря 2018

Я бы сделал это так:

# create a data frame
d = pd.DataFrame({'date': ['20/01/00','20/01/20','20/01/50']})

# create year column
d['year'] = d['date'].str.split('/').str[2].astype(int) + 1900

# add new year into old date by replacing old year 
d['new_data'] = d['date'].str.replace('[0-9]*.$','') + d['year'].astype(str)

        date year   new_data
0   20/01/00 1900   20/01/1900
1   20/01/20 1920   20/01/1920
2   20/01/50 1950   20/01/1950
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...