Pandas: Typkonvertierung mit `df.loc` von datetime64 nach int
Beim Versuch, bestimmte Werte in einer Spalte mit @ neu zuzuweisdf.loc[]
Ich erhalte einen seltsamen Typkonvertierungsfehler beim Konvertieren von Datumsangaben in Ganzzahlen.
Minimales Beispiel:
import numpy as np
import pandas as pd
import datetime
d = pd.DataFrame(zip(['12/6/2015', np.nan], [1, 2]), columns=list('ab'))
print(d)
d.loc[pd.notnull(d.a), 'a'] = d.a[pd.notnull(d.a)].apply(lambda x: datetime.datetime(2015,12,6))
print(d)
Volles Beispiel:
Hier ist mein Datenrahmen (enthält NaNs):
>>> df.head()
prior_ea_date quarter
0 12/31/2015 Q2
1 12/31/2015 Q3
2 12/31/2015 Q3
3 12/31/2015 Q3
4 12/31/2015 Q2
>>> df.prior_ea_date
0 12/31/2015
1 12/31/2015
...
341486 1/19/2016
341487 1/6/2016
Name: prior_ea_date, dtype: object
Ich möchte die folgende Codezeile ausführen:
df.loc[pd.notnull(df.prior_ea_date), 'prior_ea_date'] = df.prior_ea_date[pd.notnull(df.prior_ea_date)].apply(dt, usa=True)
wodt
ist eine Zeichenfolge für den datetime-Parser, die beim Ausführen normalerweise Folgendes ergibt:
>>> df.prior_ea_date[pd.notnull(df.prior_ea_date)].apply(dt, usa=True).head()
0 2015-12-31
1 2015-12-31
2 2015-12-31
3 2015-12-31
4 2015-12-31
Name: prior_ea_date, dtype: datetime64[ns]
Allerdings, wenn ich das @ ausführ.loc[]
Ich bekomme folgendes:
>>> df.loc[pd.notnull(df.prior_ea_date), 'prior_ea_date'] = df.prior_ea_date[pd.notnull(df.prior_ea_date)].apply(dt, usa=True)
>>> df.head()
prior_ea_date quarter
0 1451520000000000000 Q2
1 1451520000000000000 Q3
2 1451520000000000000 Q3
3 1451520000000000000 Q3
4 1451520000000000000 Q2
und es hat meine Datetime-Objekte in Ganzzahlen konvertiert.
Warum passiert diesWie vermeide ich dieses Verhalten?Ich habe es geschafft, eine vorübergehende Lösung zu finden. Ich würde mich über einzeilige Hacks freuen, aber ich hätte gerne eine Lösung im Pandastil.
Vielen Dank