Я получаю TypeError: '<=' не поддерживается между экземплярами 'str' и 'Timestamp' - PullRequest
0 голосов
/ 23 сентября 2019

Я совершенно новичок в Python и Panda Framework.Я пытаюсь обработать большой набор файлов (Excel) и группы, используя несколько имен столбцов.Каждый файл содержит следующие столбцы:

Site Dip Time                  TankId  Product
ABC  10/09/2019 18:07:33 p.m.   1      diesel

.....

После указания столбца даты, когда я перечисляю типы данных;я получаю Dip Time как объект .почему?;

Объект сайта ID танка int64 Объект продукта Dip Time объект dtype: object

Также я получаю следующую ошибку;Почему столбец даты здесь интерпретируется как строка?Что я должен сделать, чтобы преодолеть это?

TypeError: '<=' not supported between instances of 'str' and 'Timestamp'

import pandas as pd
    def read_dipsfile(writer):
        atg_path = '/Users/ratha/PycharmProjects/data/dips'
        files = os.listdir(atg_path)
        df = pd.DataFrame()
        dateCols = ['Dip Time']
        for f in files:
            data = pd.read_excel(os.path.join(atg_path, f), sheet_name='Tank Export', skiprows=[0], parse_dates=dateCols,
                                     infer_datetime_format =True)
            df = df.append(data)
        print(df.dtypes)

        x = df.groupby(['Site', 'Tank ID', 'Product'], as_index=False).apply(atg_aggregation)
        x.to_excel(writer, sheet_name='DipsSummary')


def atg_aggregation(data):
    count = data['Dip Time'].count()
    minVal = data['Dip Time'].min()
    maxVal = data['Dip Time'].max()
    tankcount = data['Tank ID'].count()
    productcount = data['Product'].count()

    agg = {
        'totalRecords': count,
        'firstSeen': minVal,
        'lastSeen': maxVal,
        'tankCount': tankcount,
        'productCount': productcount
    }
    return pd.Series(agg, index=['totalRecords', 'firstSeen', 'lastSeen', 'tankCount', 'productCount'])

1 Ответ

0 голосов
/ 23 сентября 2019

Ваше время уже в 24-часовом формате.Почему требуется am / pm?

Кроме того, «pm» делает тип столбца «объектным», даже если вы используете параметр parse_dates в read_excel.

Parse_dates работает, когда столбец «Dip Time» не имеет«pm» в нем.

 Site            Dip Time  Tank ID Product
0  ABC 2019-10-09 18:07:00        1  Diesel

df2=pd.read_csv('C:\\Users\\Desktop\\check.csv', parse_dates=datecols)

df2.dtypes
Out[14]: 
Site                object
Dip Time    datetime64[ns]
Tank ID              int64
Product             object
dtype: object

Код для удаления «am / pm» и превращения столбца «Dip Time» в тип datetime.

  Site                 Dip Time  Tank ID Product
0  ABC  10/09/2019 18:07:33 p.m        1  Diesel

df2['Dip Time']=df2['Dip Time'].str.replace('[a-z].m', '', regex=True).str.strip()

df2
Out[34]: 
  Site             Dip Time  Tank ID Product
0  ABC  10/09/2019 18:07:33        1  Diesel

df2.dtypes
Out[35]: 
Site        object
Dip Time    object
Tank ID      int64
Product     object
dtype: object

import datetime

df2['Dip Time']=pd.to_datetime(df2['Dip Time'])

df2.dtypes
Out[38]: 
Site                object
Dip Time    datetime64[ns]
Tank ID              int64
Product             object
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...