0

JSON にシリアル化したい DataFrame があり、それを DataFrame で読み戻すことができます。2 つの datetime64 列がありますが、そのうちの 1 つがオブジェクトとして返されています。タイムゾーン情報も失っていますが、 JSON を使用して Pandas DataFrame をシリアル化/逆シリアル化するときにインデックスのタイムゾーンを保持するにはどうすればよいですか、それができないことがわかります。

wxdata.info()
pd.read_json(wxdata.to_json(date_format='iso')).info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9853 entries, 0 to 9852
Data columns (total 30 columns):
 #   Column                          Non-Null Count  Dtype                     
---  ------                          --------------  -----                     
 0   time_of_day                     9853 non-null   datetime64[ns, US/Eastern]
 1   temp1                           9853 non-null   float64                   
 2   wind_chill                      9853 non-null   float64                   
 3   heat_index                      9853 non-null   float64                   
 4   dew_point                       9853 non-null   float64                   
 5   degree_day                      9853 non-null   float64                   
 6   density_altitude                9853 non-null   float64                   
 7   wet_bulb_globe_temp             9853 non-null   float64                   
 8   adjusted_altitude               9853 non-null   float64                   
 9   SAE_correction_factor           9853 non-null   float64                   
 10  rel_humidity                    9853 non-null   int64                     
 11  inst_wind_speed                 9853 non-null   float64                   
 12  inst_wind_dir                   9853 non-null   float64                   
 13  two_min_rolling_avg_wind_speed  9853 non-null   float64                   
 14  two_min_rolling_avg_wind_dir    9853 non-null   float64                   
 15  ten_min_rolling_avg_wind_speed  9853 non-null   float64                   
 16  ten_min_rolling_avg_wind_dir    9853 non-null   float64                   
 17  sixty_min_winddir_atpeak        9853 non-null   int64                     
 18  sixty_min_peak_windspeed        9853 non-null   float64                   
 19  ten_min_winddir_atpeak          9853 non-null   int64                     
 20  ten_min_peak_windspeed          9853 non-null   float64                   
 21  ten_min_wind_gust_time          9853 non-null   datetime64[ns, US/Eastern]
 22  rain_today                      9853 non-null   int64                     
 23  rain_this_week                  9853 non-null   int64                     
 24  rain_this_month                 9853 non-null   int64                     
 25  rain_this_year                  9853 non-null   int64                     
 26  rain_rate                       9853 non-null   int64                     
 27  raw_barom_pressure              9853 non-null   float64                   
 28  barom_press                     9853 non-null   float64                   
 29  solar_radiation                 9853 non-null   int64                     
dtypes: datetime64[ns, US/Eastern](2), float64(19), int64(9)
memory usage: 2.3 MB
<class 'pandas.core.frame.DataFrame'>
Int64Index: 9853 entries, 0 to 9852
Data columns (total 30 columns):
 #   Column                          Non-Null Count  Dtype              
---  ------                          --------------  -----              
 0   time_of_day                     9853 non-null   object             
 1   temp1                           9853 non-null   float64            
 2   wind_chill                      9853 non-null   float64            
 3   heat_index                      9853 non-null   float64            
 4   dew_point                       9853 non-null   float64            
 5   degree_day                      9853 non-null   float64            
 6   density_altitude                9853 non-null   float64            
 7   wet_bulb_globe_temp             9853 non-null   float64            
 8   adjusted_altitude               9853 non-null   float64            
 9   SAE_correction_factor           9853 non-null   float64            
 10  rel_humidity                    9853 non-null   int64              
 11  inst_wind_speed                 9853 non-null   float64            
 12  inst_wind_dir                   9853 non-null   float64            
 13  two_min_rolling_avg_wind_speed  9853 non-null   float64            
 14  two_min_rolling_avg_wind_dir    9853 non-null   float64            
 15  ten_min_rolling_avg_wind_speed  9853 non-null   float64            
 16  ten_min_rolling_avg_wind_dir    9853 non-null   float64            
 17  sixty_min_winddir_atpeak        9853 non-null   int64              
 18  sixty_min_peak_windspeed        9853 non-null   float64            
 19  ten_min_winddir_atpeak          9853 non-null   int64              
 20  ten_min_peak_windspeed          9853 non-null   float64            
 21  ten_min_wind_gust_time          9853 non-null   datetime64[ns, UTC]
 22  rain_today                      9853 non-null   int64              
 23  rain_this_week                  9853 non-null   int64              
 24  rain_this_month                 9853 non-null   int64              
 25  rain_this_year                  9853 non-null   int64              
 26  rain_rate                       9853 non-null   int64              
 27  raw_barom_pressure              9853 non-null   float64            
 28  barom_press                     9853 non-null   float64            
 29  solar_radiation                 9853 non-null   int64              
dtypes: datetime64[ns, UTC](1), float64(19), int64(9), object(1)
memory usage: 2.3+ MB

ご覧のとおり、最初の datetime64 列は、datetime64 ではなくオブジェクトとして返されます。date_format='iso' スイッチなしでこれを行うと、'time_of_day' は datetime64 ではなく int64 として返されます。

助けてくれてありがとう。

4

2 に答える 2

1

それだけでした。「time_of_day」列の名前を「timestamp」に変更すると、両方の列が datetime64 になりました。

https://pandas.pydata.org/docs/user_guide/io.html#io-json-reader

ノート

convert_dates=True で、データおよび/または列ラベルが「日付のように」表示される場合、大きな整数値は日付に変換される場合があります。正確なしきい値は、指定された date_unit によって異なります。'date-like' は、列ラベルが次の基準のいずれかを満たすことを意味します。

「_at」で終わる

「_time」で終わる

「タイムスタンプ」で始まります

それは「変更された」

それは「日付」です

于 2020-08-10T18:03:25.200 に答える
0

errors='coerce'パラメータを日付変換メソッドに指定できます。変換できないエントリは NaT (時間ではない) として返されます。次に、問題のある項目を確認できます。例えば:

df['time_of_day'] = pd.to_datetime(df['time_of_day'], 
                                   errors='coerce',
                                   exact='True',
                                   format='%Y-%m-%d' # provide your format here
                                  )

于 2020-08-10T15:56:53.667 に答える