如何在Python中创建包含公历与伊斯兰历日期的DataFrame
如何在Python中创建包含公历与伊斯兰历信息的DataFrame
要生成符合要求的DataFrame,我们可以借助pandas处理日期数据,hijri-converter实现公历与伊斯兰历的转换,步骤如下:
1. 安装依赖库
首先安装所需的第三方库:
pip install pandas hijri-converter
2. 完整实现代码
import pandas as pd from hijri_converter import convert from hijri_converter.constants import MONTHS_EN, MONTHS_AR, WEEKDAYS_EN, WEEKDAYS_AR # 生成目标公历日期范围(可根据需求调整起止日期) gregorian_dates = pd.date_range(start='2019-12-01', end='2019-12-02') # 存储所有数据的列表 data_records = [] for date in gregorian_dates: # 提取公历日期的各部分信息 greg_date_str = date.strftime('%Y-%m-%d') greg_year = date.year greg_month = date.month greg_day = date.day # 将公历日期转换为伊斯兰历对象 hijri_obj = convert.Gregorian(date.year, date.month, date.day).to_hijri() hij_date_str = hijri_obj.strftime('%Y-%m-%d') # 获取伊斯兰历月份的英文、阿拉伯语名称 hij_month_en = MONTHS_EN[hijri_obj.month] hij_month_ar = MONTHS_AR[hijri_obj.month] # 处理星期几的索引转换:pandas weekday()返回0=周一,对应伊斯兰历星期索引0=周日 weekday_index = date.weekday() + 1 if weekday_index == 7: weekday_index = 0 # 获取星期几的英文、阿拉伯语名称 hij_day_en = WEEKDAYS_EN[weekday_index] hij_day_ar = WEEKDAYS_AR[weekday_index] # 将单条记录添加到列表 data_records.append([ greg_date_str, greg_year, greg_month, greg_day, hij_date_str, hij_month_en, hij_month_ar, hij_day_en, hij_day_ar ]) # 构造DataFrame df = pd.DataFrame( data_records, columns=[ 'gregorian_date', 'gregorian_year', 'gregorian_month', 'gregorian_day', 'hijri_date', 'hijri_month_en_name', 'hijri_month_ar_name', 'hijri_day_en_name', 'hijri_day_ar_name' ] ) # 输出结果 print(df)
3. 代码说明
- 日期范围:通过
pd.date_range生成需要处理的公历日期序列,可自由调整起止日期; - 伊斯兰历转换:
hijri-converter库提供了成熟的公历转伊斯兰历功能,直接调用convert.Gregorian().to_hijri()即可; - 名称映射:库内置的
MONTHS_EN、MONTHS_AR、WEEKDAYS_EN、WEEKDAYS_AR常量直接提供了对应名称的映射,无需手动编写; - 星期索引调整:由于pandas与伊斯兰历星期索引的起始值不同,需要做简单的索引转换以匹配正确的星期名称。
运行代码后,将得到与示例格式完全一致的DataFrame。
内容的提问来源于stack exchange,提问作者Ahmed Awad
相关产品推荐
相关产品推荐

