read_json не показывает столбец как datetime64[ns]

#python #json #pandas #datetime #datetime-format

Вопрос:

поэтому у меня возникли большие проблемы с получением столбца фрейма данных pandas для чтения как dtype datetime64[ns] после сохранения в формате json. Я перепробовал почти все, что видел в Интернете, pd.datetime(обмен, формат), astype(datetime64[ns]), dateformat = ‘iso’ и т. Д. Это странно и очень расстраивает, так как все мои другие кадры данных со столбцами даты, сохраненные в виде файлов json, правильно считываются с типом dtype как datetime64[ns]. Я был бы очень признателен за некоторую помощь

Вот последние несколько строк моего кода, в которых я создаю фрейм данных и что он возвращает:

 player = pd.DataFrame(full, index = list(range(len(full))), columns = ['Name', 'Handedness', 'Height', 'Bday'])
player.Height = player.Height.str[:-2]
player.Height = pd.to_numeric(player.Height)
player.Bday = pd.to_datetime(player.Bday, format = '%d/%m/%Y')
player = player.reset_index(drop = True)

player.to_json(f'../../Datasets/Singles_players/Player_Traits/{Event}_players.json', date_format = 'iso')

print(player.info())
print(player.head())

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 25 entries, 0 to 24
Data columns (total 4 columns):
 #   Column      Non-Null Count  Dtype         
---  ------      --------------  -----         
 0   Name        25 non-null     object        
 1   Handedness  25 non-null     object        
 2   Height      25 non-null     float64       
 3   Bday        25 non-null     datetime64[ns]
dtypes: datetime64[ns](1), float64(1), object(2)
memory usage: 928.0  bytes
None
                       Name Handedness  Height       Bday
0              KENTO MOMOTA       Left   175.0 1994-09-01
1            VIKTOR AXELSEN      Right   194.0 1994-01-04
2           ANDERS ANTONSEN      Right   183.0 1997-04-27
3            CHOU TIEN CHEN      Right   180.0 1990-01-08
4  ANTHONY SINISUKA GINTING      Right   171.0 1996-05-11
 

Все хорошо, НО вот что происходит, когда я читаю файл:

 player = pd.read_json('../Datasets/Singles_Players/Player_Traits/MS_players.json')

print(player.info())
print(player.head())

<class 'pandas.core.frame.DataFrame'>
Int64Index: 25 entries, 0 to 24
Data columns (total 4 columns):
 #   Column      Non-Null Count  Dtype 
---  ------      --------------  ----- 
 0   Name        25 non-null     object
 1   Handedness  25 non-null     object
 2   Height      25 non-null     int64 
 3   Bday        25 non-null     object
dtypes: int64(1), object(3)
memory usage: 1000.0  bytes
None
                       Name Handedness  Height                      Bday
0              KENTO MOMOTA       Left     175  1994-09-01T00:00:00.000Z
1            VIKTOR AXELSEN      Right     194  1994-01-04T00:00:00.000Z
2           ANDERS ANTONSEN      Right     183  1997-04-27T00:00:00.000Z
3            CHOU TIEN CHEN      Right     180  1990-01-08T00:00:00.000Z
4  ANTHONY SINISUKA GINTING      Right     171  1996-05-11T00:00:00.000Z
 

Комментарии:

1. трудно сказать, не видя всех данных. что происходит, когда вы конвертируете в datetime после импорта? меняется ли он на datetime64[ns] или выдает ошибку? возможно, где-то в ваших данных у вас неудачная дата, которую панды не могут вычислить, поэтому она считывает все как объект???

2. Что произойдет, если вы сделаете это: player = pd.read_json('../Datasets/Singles_Players/Player_Traits/MS_players.json', convert_dates=True) ?