2017-12-19 4 views
1

내가 분석하고있는 TMDB dataset on Kaggle 일부 항목에 대한 변수 release_date에서 올해의 존재는 변수 release_year과 비교했을 때 사십년에 의해 이동된다 : 나는했습니다transform`

# Change to pandas datetime 
tmdb_df['release_date'] = pd.to_datetime(tmdb_df['release_date']) 

tmdb_df.query('release_date > datetime.date(2015,12,31)')[['release_date', 'release_year']].head() 
### 
#release_date release_year 
#9849 2062-10-04 1962 
#9850 2062-12-10 1962 
#9851 2062-06-13 1962 
#9852 2062-12-25 1962 
#9853 2062-10-24 1962 

apply를 사용하여 솔루션을 함께 제공 :

# Check for movies where the year on `release_date` are shifted 
# when compared with `release_yer` 
import datetime 

# Change to pandas datetime 
tmdb_df['release_date'] = pd.to_datetime(tmdb_df['release_date']) 

def aux_func(row): 
    """Fix year""" 
    if row['release_date'].year != row['release_year']: 
     return row['release_date'].replace(year=row['release_year']) 
    else: 
     return row['release_date'] 

# Apply fix 
tmdb_df['release_date'] = tmdb_df[['release_date', 'release_year']].apply(aux_func, axis=1) 

그러나 다른 방법이있는 경우는이 문제를 해결하기 위해 팬더 'transform를 사용하는 것이 가능한 경우, 또는 궁금했다.

답변

1

먼저 year없이 날짜 년에 가입 같은 해 항상하려면 다음

df = pd.DataFrame({'release_date':['2062-10-04','1980-12-10'],'release_year':[1962,1980]}) 
print (df) 
    release_date release_year 
0 2062-10-04   1962 
1 1980-12-10   1980 

df['release_date'] = pd.to_datetime(df['release_year'].astype(str) + 
            df['release_date'].str[4:]) 

print (df) 

    release_date release_year 
0 1962-10-04   1962 
1 1980-12-10   1980 
+0

감사합니다, @jezrael을. 내가 이해하는 것을 위해, 그것은 또한 년이 ok 인 입구를 베낄 것이다. 나 맞아? – gabra

+0

예, 정확하게. 나는 마스크가 필요 없다고 생각한다. 아니면 뭔가 빠졌습니까? – jezrael

+0

나는 그것이 좋다고 생각한다. 나는 또한 올해는 같은 항목을 피하려고했지만 그것은 필요하지 않습니다 생각합니다. 'if'로 체크하거나 그냥 덮어 쓰면 같은 결과가 나옵니다. 감사. – gabra