Я не могу заставить scilearn работать с серией datetime.
нашел этот пост, но не помог мне = Pandas: TypeError: float() аргумент должен быть строкой или числом
CSV файл имеет 2 столбца даты с датой, даты в следующем формате: 2017-07-21 06:19:53 (строка)
я преобразовал строку в datetime64 [нс], так что дата стала длинным значением, и я мог делать вычисления на ней. scilearn отклоняет этот тип и выдает ошибку. Аргумент float() должен быть строкой или числом, а не меткой времени.
также попытался с pandas.to_datetime() не повезло.
модель, которую я использую в scilearn, является моделью кластеризации KMeans. при печати dtypes это результат:
ip int64
date datetime64[ns]
succesFlag int64
app int64
enddate datetime64[ns]
user_userid int64
dtype: object
Вот мой код:
def getDataframe():
df = pd.read_csv(filename)
df['date']=df['date'].astype('datetime64[ns]',inplace=True)
df['enddate']=df['enddate'].astype('datetime64[ns]',inplace=True)
df['app']=df['app'].replace({
"Azure": 0 ,
"Peoplesoft":1,
"Office":2 ,
"DevOps":3 ,
"Optima":4 ,
"Ada-Tech": 5
},inplace=True)
df['ip']=df['ip'].apply(lambda x: int(ip4.ip_address(x))).to_frame('ip')
print(df.dtypes)
return df
ожидалось, что модель кластеризации KMeans будет работать с числовыми значениями по мере их преобразования, но это не так.
что я не прав?
Я предлагаю изменить ваше решение, но также упростить:
parse_dates
для преобразования столбцов в datetime, а затем в числовые unix datetimeinplace=True
или использования более быстрой map
- он также создает NaN для несоответствующих значений, поэтому вывод также является числовымdef getDataframe():
df = pd.read_csv(filename, parse_dates=['date','enddate'])
df[['date','enddate']] = df[['date','enddate']].astype(np.int64) // 10**9
df['app']=df['app'].map({
"Azure": 0 ,
"Peoplesoft":1,
"Office":2 ,
"DevOps":3 ,
"Optima":4 ,
"Ada-Tech": 5
})
df['ip']=df['ip'].apply(lambda x: int(ip4.ip_address(x))).to_frame('ip')
print(df.dtypes)
return df