2017-12-19 1 views
1

ich bin Analyse TMDB dataset on Kaggle und das Jahr in der Variable release_date auf einige Einträge werden durch 40 Jahre verschoben wird, wenn mit der Variablen verglichen release_year:eine alternative Lösung mit Pandas `Implementierung 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 

Ich habe kommen mit einer Lösung mit 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) 

Aber ich frage mich, ob es möglich ist, zu verwenden Pandas' transform dies zu lösen, oder wenn es einen anderen Ansatz.

Antwort

1

Wenn immer selben Jahr wollen dann erste Jahr mit Datum beitreten, ohne 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

Danke, @jezrael. Soweit ich weiß, wird das auch die Einträge kopieren, bei denen die Jahre in Ordnung sind. Hab ich recht? – gabra

+0

Ja, genau. Ich denke Maske ist hier nicht nötig. Oder etwas fehlt? – jezrael

+0

Ich denke, es ist Ok. Ich habe auch versucht, die Einträge zu vermeiden, in denen das Jahr gleich ist, aber ich denke, dass es nicht notwendig ist. Wenn Sie es mit "if" überprüfen oder einfach überschreiben, erhalten Sie das gleiche Ergebnis. Vielen Dank. – gabra

Verwandte Themen