Ich lese eine Excel-Datei und möchte eine Datetime-Spalte zum 1. eines jeden Monats löschen. Die Entbehrung funktioniert gut, aber Pandas versuchen, die Strings in Floats umzuwandeln, und es wird ein Fehler ausgegeben, wenn sie als Coulmn eines vorhandenen Datenrahmens hinzugefügt werden.Wie man Pandas davon abhält, Strings in Floats zu konvertieren?
Wie kann ich dies deaktivieren, und nur eine Spalte mit Art der Zeichenfolge oder Datum?
Ich habe versucht, variiert Mapping/Typ Casting ohne Wirkung (gleicher Fehler). Wenn ich zu einem Proxy-Int konvertiere, verschwindet das Typ-Casting-Problem (da es es in float konvertieren kann), aber es ist eine hässliche Problemumgehung, anstatt das wirkliche Problem zu lösen.
Code-Snippet veranschaulicht das Problem
df = pd.read_excel(file_name, skiprows=[1], skip_footer=1)
print(df['Purch.Date'].dtype)
>>> datetime64[ns]
print(df['Purch.Date'].head())
>>> 0 2016-06-23
>>> 1 2016-06-09
>>> 2 2016-06-24
>>> 3 2016-06-24
>>> 4 2016-06-24
df['YearMonthCapture'] = df['Purch.Date'].map(lambda x: str(x.replace(day=1).date())).astype(str)
>>> ValueError: could not convert string to float: '2016-06-01'
# === Other approached resulting in same error ===
#df['YearMonthCapture'] = df['Purch.Date'].map(lambda x: x.replace(day=1))
#df['YearMonthCapture'] = pd.Series(df['Purch.Date'].map(lambda x: str(x.replace(day=1).date())), dtype='str')
#df['YearMonthCapture'] = pd.Series(df['Purch.Date'].apply(lambda x: str(x.replace(day=1).date())), dtype='str')
# === Ugly work around that does not really address the problem) ===
df['YearMonthCapture'] = pd.Series(df['Purch.Date'].apply(lambda x: 100*x.year + x.month)
Danke, funktionierte schön – EmilMachine