Аргумент float () должен быть строкой или числом, а не меткой времени

1

Я не могу заставить 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 будет работать с числовыми значениями по мере их преобразования, но это не так.

что я не прав?

Теги:
pandas
scikit-learn

1 ответ

0
Лучший ответ

Я предлагаю изменить ваше решение, но также упростить:

  • добавить параметр parse_dates для преобразования столбцов в datetime, а затем в числовые unix datetime
  • для преобразования remove inplace=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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню