我知道這似乎是一個多余的問題,但我無法按日期過濾我的資料框。
背景: 我有一個包含 2020 年到 2022 年之間所有訂單的資料框。從這個資料框中,我需要過濾掉汽車沒有“品牌化”的日期。按我的方法過濾會產生一個空資料框,我認為問題出在日期格式錯誤。基本上,我認為我無法將 'pandas._libs.tslibs.timestamps.Timestamp' 轉換為 'datetime.datetime'。
到目前為止我的代碼:
cars = ['AAA111', 'BBB222', 'CCC333']
branded = ['2020-11-19', '2019-04-30', '2019-09-10']
debranded = ['2022-06-21', '2020-03-01', '2020-03-01']
orders = pd.read_csv('filtered_orders.csv', index_col=0)
orders = orders.rename({'Created Time': 'time'}, axis='columns')
branded_time = [datetime.strptime(x, "%Y-%m-%d") for x in branded]
debranded_time = [datetime.strptime(x, "%Y-%m-%d") for x in debranded]
time_list = orders['time'].tolist()
time_list_formated =[]
for x in time_list:
time_list_formated.append(datetime.strptime(x, '%Y-%m-%d %H:%M:%S'))
orders['times'] = time_list_formated
filtered_orders = pd.DataFrame()
for x in cars:
for y in branded_time:
for z in debranded_time:
filtered_orders.append(orders[(orders['Car'] == x) & (orders['times'] >= y) & (orders['times'] <= z)])
brand_time 和 debrand_time 變數是 datetime.datetime 格式,orders['times'] 是 pandas._libs.tslibs.timestamps.Timestamp。
我將非常感謝您在這方面給我的任何幫助。
編輯:
我的資料集看起來有點像這樣:
Created Time Ride price Car
2022-06-20 16:09:53 AAA111
2019-01-03 15:37:20 x1 BBB222
2019-06-30 16:09:51 BBB222
2021-06-21 15:37:10 x2 BBB222
2022-05-03 16:09:52 BBB222
2019-01-03 15:37:20 x3 CCC333
2019-06-30 16:09:51 x4 CCC333
2021-06-21 15:37:10 x5 CCC333
2022-05-03 16:09:52 x6 CCC333
運行腳本后,我想要一些看起來像這樣的東西:
Created Time Ride price Car
2022-06-20 16:09:53 AAA111
2019-06-30 16:09:51 BBB222
uj5u.com熱心網友回復:
我認為這將為您提供所需的東西:
import pandas as pd
import numpy as np
cars = ['AAA111', 'BBB222', 'CCC333']
branded = ['2020-11-19', '2019-04-30', '2019-09-10']
debranded = ['2022-06-21', '2020-03-01', '2020-03-01']
df_cars = pd.DataFrame({
'Cars' : cars,
'Branded' : branded,
'Debranded' : debranded
})
df_merge = pd.merge(df1, df_cars, how = 'left', left_on = 'Car', right_on = 'Cars')
df_merge['Created Time'] = pd.to_datetime(df_merge['Created Time'], infer_datetime_format=True)
df_merge['Branded'] = pd.to_datetime(df_merge['Branded'], infer_datetime_format=True)
df_merge['Debranded'] = pd.to_datetime(df_merge['Debranded'], infer_datetime_format=True)
df_merge = df_merge.loc[np.where(df_merge['Created Time'].between(df_merge['Branded'], df_merge['Debranded']), True, False)]
df_merge
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/496328.html
