Estoy trabajando en un conjunto de datos y apliqué el método to_json() para exportar un marco de datos de pandas en un archivo json. Luego usaré este archivo json para cargarlo en MongoDB. Sin embargo, me doy cuenta de que el formato de fecha y hora se convirtió a la marca de tiempo de época. ¿Cómo conservo el formato de fecha y hora mientras exporto a un archivo JSON y cargo el archivo json en MongoDB? Además, no quiero campos nulos en la salida json.
d.f.:
user_id datetime 0 69490717 [{'checkin_date': 2021-02-01 00:00:00}] 1 67125777 [{'checkin_date': 2021-02-01 00:00:00}] 2 62747294 NaN 3 63216896 [{'checkin_date': 2021-02-01 00:00:00}] 4 51466797 [{'checkin_date': 2021-01-31 00:00:00}] ... ... ... 96 82758550 NaN 97 44662827 NaN 98 36376189 [{'checkin_date': 2021-01-18 00:00:00}] 99 71910948 [{'checkin_date': 2021-01-18 00:00:00}, {'checkout_date': 2021-01-20 00:00:00}] 100 54620533 NaNFragmento de salida json:
[{"user_id":62507249,"datetime":[{"checkin_date":1612051200000},{"checkout_date":1612051200000}]}, {"user_id":69546481,"datetime":[{"checkin_date":1612051200000}]}, ......]A continuación se muestra mi código para convertir a json:
jsonresult = df.T.apply(lambda row: row[~row.isnull()].to_json()) json_wrapped = "[%s]" % ",".join(jsonresult) # write JSON to file with open('jsonresult.json', 'w') as f: f.write(json_wrapped)Debe convertir su columna de fecha y datetime en una string usando Series.astype :
df['datetime'] = df['datetime'].astype(str) Además, su código para convertir esto a json es innecesario. Puedes hacerlo a continuación:
jsonresult = df.to_json(orient='records')Creo que necesita date_format='iso' en DataFrame.to_json y para eliminar filas con valores faltantes es posible usar DataFrame.dropna :
a = [{"user_id":1,"datetime":[{"checkin_date":pd.Timestamp('2021-02-01 00:00:00')}, {"checkout_date":pd.Timestamp('2021-02-01 00:00:00')}]}, {"user_id":2,"datetime":[{"checkin_date":pd.Timestamp('2021-02-01 00:00:00')}]}, {"user_id":4,"datetime": np.nan}] df = pd.DataFrame(a) print (df) user_id datetime 0 1 [{'checkin_date': 2021-02-01 00:00:00}, {'chec... 1 2 [{'checkin_date': 2021-02-01 00:00:00}] 2 4 NaN jsonresult = df.dropna(subset=['datetime']).to_json(date_format='iso', orient='records') print (jsonresult) [{"user_id":1,"datetime":[{"checkin_date":"2021-02-01T00:00:00.000Z"}, {"checkout_date":"2021-02-01T00:00:00.000Z"}]}, {"user_id":2,"datetime":[{"checkin_date":"2021-02-01T00:00:00.000Z"}]}] dictresult = df.dropna(subset=['datetime']).to_dict(orient='records') print (dictresult) [{'user_id': 1, 'datetime': [{'checkin_date': Timestamp('2021-02-01 00:00:00')}, {'checkout_date': Timestamp('2021-02-01 00:00:00')}]}, {'user_id': 2, 'datetime': [{'checkin_date': Timestamp('2021-02-01 00:00:00')}]}]