我正在处理一个数据集,它有一个格式为dd-mm-yyyy
的日期列,但是这个列是一个对象,我需要它是日期时间格式,以便提取日期的月份。然而,当使用函数pd.to_datetime
时,表示月份开始的日期,如11-02-2022
,将被转换为2022-11-02
,当它实际上应该是2022-02-11
时。所以当我试图提取月份时,结果是11
而不是02
。这不会发生在像:31-03-2022
这样的日期上,因为它被转换为2022-03-31
,月份是03
。
这是我的代码:
data_flights['date'] = pd.to_datetime(data_flights['date'], format='%d-%m-%Y')
data_flights['month'] = data_flights['date'].dt.month
字符串
这是我的数据集的输出:table
如果我使用dayfirst = True
,同样的情况也会发生,我使用的是python 3.9和jupyter。
我的数据来自2个csv文件。一个包含经济舱机票的信息,另一个包含商务舱机票的信息。两个数据集都具有以下格式:
date,airline,ch_code,num_code,dep_time,from,time_taken,stop,arr_time,to,price
11-02-2022,Air India,AI,868,18:00,Delhi,02h 00m,non-stop ,20:00,Mumbai,"25,612"
11-02-2022,Air India,AI,624,19:00,Delhi,02h 15m,non-stop ,21:15,Mumbai,"25,612"
11-02-2022,Air India,AI,531,20:00,Delhi,24h 45m,"1-stop",20:45,Mumbai,"42,220"
11-02-2022,Air India,AI,839,21:25,Delhi,26h 30m,"1-stop",23:55,Mumbai,"44,450"
型
我加载两个数据集的方式是:
data_economy = pd.read_csv('economy.csv')
data_business = pd.read_csv('business.csv')
型
然后我把两者合并成这样:
economy_df = data_economy.assign(ticket_class = 0)
business_df = data_business.assign(ticket_class = 1)
data_flights = pd.concat([economy_df,business_df])
型
2条答案
按热度按时间zzzyeukh1#
我建议您定义一个日期解析器,然后在解析时将其用于名为
date
的特定列:字符串
或者,如果你有Pandas 2.0.0或更高版本,请使用
date_format
而不是date_parser
:型
然后你可以删除这一行:
型
.因为数据已经被解析为正确格式的日期。
请参阅Panda的
read_csv
docs以了解更多细节和示例。ibps3vxo2#
从你提供的信息中我看不出你是如何得到11个月的,而且只针对经济数据集。也许我错过了问题中的一些细节。
我试着在你提供的示例CSV上运行你的代码,看起来Pandas正确地解析了日期,基于格式"day-month-year"。
字符串
我得到一个月的2:
型
然后我可以保存修改后的df,再次使用相同的日期格式字符串:
型
我的输出. csv看起来像:
型