Я пытаюсь написать заявление «если тогда».Если df ['time'] имеет формат YYYY, тогда df ['time'] = df ['year'].Остальное df ['time'] = df ['date2'] - PullRequest
0 голосов
/ 24 сентября 2019

Я создаю код, который будет работать с несколькими наборами данных.Некоторые наборы данных дают мне год, а некоторые - месяц-день-год.У меня уже есть код для извлечения месяцев и дней из нескольких лет, но мне нужно написать что-то, что оставит годы в покое, если оно уже в формате ГГГГ.

if df['year'] **contains four digits YYYY:
 df['year']=df['year']

else:
 df['year'] = df['monthdayyear'].astype(str).str[:10]

В конечном счете, я бы хотелесть только годы, оставшиеся в формате ГГГГ

1 Ответ

0 голосов
/ 24 сентября 2019

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

import pandas as pd
import numpy as np
a = {'year':[1990,1923,1904,'not4digits','not4digits',2001],'monthdayyear':[1990,1923,1904,20140901,20180305,2001]}
df = pd.DataFrame(a)
print(df)
df['year'] = np.where(len(df['year']) == 4, df['year'],df['monthdayyear'].astype(str).str[:10])
print(df)

Вывод перед применением условия:

         year  monthdayyear
0        1990          1990
1        1923          1923
2        1904          1904
3  not4digits      20140901
4  not4digits      20180305
5        2001          2001

Вывод после применения np.where, если условие не выполняется и значения в столбце year заменены значениями в столбцах monthdayyear:

       year  monthdayyear
0      1990          1990
1      1923          1923
2      1904          1904
3  20140901      20140901
4  20180305      20180305
5      2001          2001
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...