成為python pandas中的以下DataFrame:
| 日期 | time_SEL | time_02_SEL_01 | time_03_SEL_05 | 其他 |
|---|---|---|---|---|
| 2022-01-01 | 34756 | 233232 | 3432423 | 756 |
| 2022-01-03 | 23322 | 4343 | 3334 | 343 |
| 2022-02-01 | 123232 | 3242 | 23423 | 434 |
| 2022-03-01 | 7323232 | 32423 | 323423 | 34324 |
除日期外的所有列都代表時間的一小部分(以秒為單位)。我的想法是將這些值傳遞給 TimeDelta,記住我只想將更改應用于包含字串“_SEL”的列。
自然我想為每個字串應用它們,因為在原始資料集中,這個字串將超過 3 列。如果只有 3 個,我會知道如何手動完成。
我希望你能幫助我,最好的問候。
uj5u.com熱心網友回復:
您可以在原始資料框選擇的所有列上:apply pandas.to_timedeltafilterupdate
df.update(df.filter(like='_SEL').apply(pd.to_timedelta, unit='s'))
注意。沒有輸出,修改就位
更新的資料框:
date time_SEL time_02_SEL time_03_SEL other
0 2022-01-01 0 days 09:39:16 2 days 16:47:12 39 days 17:27:03 756
1 2022-01-03 0 days 06:28:42 0 days 01:12:23 0 days 00:55:34 343
2 2022-02-01 1 days 10:13:52 0 days 00:54:02 0 days 06:30:23 434
3 2022-03-01 84 days 18:13:52 0 days 09:00:23 3 days 17:50:23 34324
更新“TypeError:無效的型別提升”
確保你有數字:
(df.update(df.filter(like='_SEL')
.apply(lambda c: pd.to_timedelta(pd.to_numeric(c, errors='coerce'),
unit='s'))
)
uj5u.com熱心網友回復:
用于DataFrame.filter獲取所有列的結尾_SEL,轉換為 timedeltasto_timedelta并將原始的替換為DataFrame.update:
df.update(df.filter(regex='_SEL$').apply(lambda x: pd.to_timedelta(x, unit='s')))
print (df)
date time_SEL time_02_SEL time_03_SEL other
0 2022-01-01 0 days 09:39:16 2 days 16:47:12 39 days 17:27:03 756
1 2022-01-03 0 days 06:28:42 0 days 01:12:23 0 days 00:55:34 343
2 2022-02-01 1 days 10:13:52 0 days 00:54:02 0 days 06:30:23 434
3 2022-03-01 84 days 18:13:52 0 days 09:00:23 3 days 17:50:23 34324
另一個想法是按以下方式過濾列Series.str.endswith:
m = df.columns.str.endswith('_SEL')
df.loc[:, m] = df.loc[:, m].apply(lambda x: pd.to_timedelta(x, unit='s'))
print (df)
date time_SEL time_02_SEL time_03_SEL other
0 2022-01-01 0 days 09:39:16 2 days 16:47:12 39 days 17:27:03 756
1 2022-01-03 0 days 06:28:42 0 days 01:12:23 0 days 00:55:34 343
2 2022-02-01 1 days 10:13:52 0 days 00:54:02 0 days 06:30:23 434
3 2022-03-01 84 days 18:13:52 0 days 09:00:23 3 days 17:50:23 34324
編輯:對于將列的值轉換為整數,請使用.astype(int):
df.update(df.filter(regex='_SEL$').astype(int).apply(lambda x: pd.to_timedelta(x, unit='s')))
如果失敗,因為一些非數值使用:
df.update(df.filter(regex='_SEL$').apply(lambda x: pd.to_timedelta(pd.to_numeric(x, errors='coerce'), unit='s')))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/474530.html
下一篇:計算兩個日期欄位之間的天數差
