我有一個包含以下列和資料型別的資料框(test_df):
| Column | Data Type |
|---------------------|------------------|
| flowId | object |
| flowName | object |
| executionId | object |
| startedAt | datetime64[ns, tzlocal()] |
| lastUpdatedAt | datetime64[ns, tzlocal()] |
| dataPullStartTime| datetime64[ns, tzlocal()] |
| dataPullEndTime | datetime64[ns, tzlocal()] |
| bytesProcessed | float64 |
| bytesWritten | float64 |
| recordsProcessed | float64 |
在將此資料框轉換為 JSON 型別格式之前,我想使用 strftime 將日期時間列更改為字串。
test_df[['startedAt','lastUpdatedAt', 'dataPullStartTime', 'dataPullEndTime']] =
test_df[['startedAt','lastUpdatedAt',
'dataPullStartTime','dataPullEndTime']].apply(datetime.strftime('%Y-%m-%d
%H:%M:%S.%f'), axis=1)
但是,我總是收到以下錯誤:
TypeError: descriptor 'strftime' for 'datetime.date' objects doesn't apply to a 'str' object
我沒有得到問題,因為各個列的資料型別是 datetime 而不是 str。有人可以幫忙嗎?我已經從堆疊中嘗試了多種解決方案,但我無法解決這個問題。
提前致謝!
uj5u.com熱心網友回復:
你可以一欄一欄地做
for col in ['startedAt','lastUpdatedAt', 'dataPullStartTime','dataPullEndTime'] :
test_df[col] = test_df[col].apply(lambda x: datetime.strftime(x, '%Y-%m-%d %H:%M:%S.%f'))
uj5u.com熱心網友回復:
apply需要一個函式,而不是作為 args 的物件。
df["dataPullEndTime"].apply(lambda x: datetime.strftime(x, '%Y-%m-%d %H:%M:%S.%f'))
復制
datetime.strftime('%Y-%m-%d %H:%M:%S.%f')
TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'str'
uj5u.com熱心網友回復:
您應該dt.strfime對每列使用矢量:
cols = ['startedAt','lastUpdatedAt', 'dataPullStartTime', 'dataPullEndTime']
df[cols] = df[cols].apply(lambda c: c.dt.strftime('%Y-%m-%d %H:%M:%S.%f'))
或者,對于就地修改:
cols = ['startedAt','lastUpdatedAt', 'dataPullStartTime', 'dataPullEndTime']
df.update(df[cols].apply(lambda c: c.dt.strftime('%Y-%m-%d %H:%M:%S.%f')))
例子:
df = pd.DataFrame({'col1': ['2000-01-01'], 'col2': ['2022-01-01']})
df['col1'] = pd.to_datetime(df['col1'])
df['col2'] = pd.to_datetime(df['col2'])
print(df)
col1 col2
0 2000-01-01 2022-01-01
cols = ['col1', 'col2']
df.update(df[cols].apply(lambda c: c.dt.strftime('%Y-%m-%d %H:%M:%S.%f')))
print(df)
col1 col2
0 2000-01-01 00:00:00.000000 2022-01-01 00:00:00.000000
uj5u.com熱心網友回復:
感謝大家。不幸的是,沒有一個提議的解決方案對我有用......
最后,我使用以下代碼行使其作業:
cols = ['startedAt','lastUpdatedAt', 'dataPullStartTime', 'dataPullEndTime']
test_df[cols] = pd.to_datetime(test_df[cols].stack(), errors='coerce').dt.strftime('%Y-%m-%d %H:%M:%S').unstack()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472601.html
上一篇:在日期串列中找到最小的期間
