如何将Timestamp转换为日期格式?PySimpleGUI项目开发问题
解决PySimpleGUI表格中Pandas Timestamp日期格式显示问题
我是Python新手,正在用PySimpleGUI开发项目追踪器管理工作。手动转换列表日期值时,出现打印错误且值被移出列表的问题,没法正常构建表格。想找个全局方法把日期格式从Timestamp转为Date或Datetime格式。
以下是我的代码:
import PySimpleGUI as sg import pandas as pd from datetime import datetime Excel_Read = pd.read_excel('C:\pythonProject\Schedule\Project_Schedule.xlsx', sheet_name='Schedule') schedule_headings = ['Priority', 'Project_Name','Project_Num','Due_Date','Sales','Engineer','PM/PC' ] Schedule_Table = pd.DataFrame(schedule_headings) Schedule_List = Excel_Read.values.tolist() def create_schedule(schedule_info_array, schedule_headings): schedule_info_window_layout = [ [sg.Table(values=Schedule_List, headings=schedule_headings, max_col_width=35, auto_size_columns=True, display_row_numbers=False, justification='Left', num_rows=10, enable_events=True, enable_click_events=True, key='-SCHEDULE_TABEL-', row_height=35)] ] Schedule_info_window = sg.Window('Schedule Info', schedule_info_window_layout, modal=True) while True: event, values = Schedule_info_window.read() if event in (sg.WINDOW_CLOSED, 'Exit'): break if event == '-SCHEDULE_TABEL-': print(values['-SCHEDULE_TABEL-'][0]) #name = Schedule_List[(values['-SCHEDULE_TABEL-'][0])][4], #print(type(Schedule_List[0][3])) #print(Schedule_List)
解决方法
1. 全局转换Timestamp格式
读取Excel后直接处理日期列,将Pandas Timestamp转为date对象或指定格式的字符串,PySimpleGUI的Table组件能正常识别这两种类型:
# 读取Excel后处理Due_Date列 Excel_Read['Due_Date'] = pd.to_datetime(Excel_Read['Due_Date']).dt.date # 转为date对象 # 若需要特定字符串格式,比如'YYYY-MM-DD',用下面的代码 # Excel_Read['Due_Date'] = pd.to_datetime(Excel_Read['Due_Date']).dt.strftime('%Y-%m-%d')
2. 修正代码中的冗余与错误
- 移除无用的
Schedule_Table = pd.DataFrame(schedule_headings)代码,这行创建的是错误的DataFrame,对后续逻辑无帮助 - 修正表格组件的key拼写错误:
-SCHEDULE_TABEL-改为-SCHEDULE_TABLE- - Excel路径前加
r避免转义字符问题:r'C:\pythonProject\Schedule\Project_Schedule.xlsx'
3. 完整修正后的代码
import PySimpleGUI as sg import pandas as pd from datetime import datetime # 读取Excel并处理日期列,路径加r避免转义 Excel_Read = pd.read_excel(r'C:\pythonProject\Schedule\Project_Schedule.xlsx', sheet_name='Schedule') # 将Timestamp转为date对象 Excel_Read['Due_Date'] = pd.to_datetime(Excel_Read['Due_Date']).dt.date schedule_headings = ['Priority', 'Project_Name','Project_Num','Due_Date','Sales','Engineer','PM/PC' ] Schedule_List = Excel_Read.values.tolist() def create_schedule(schedule_info_array, schedule_headings): schedule_info_window_layout = [ [sg.Table(values=Schedule_List, headings=schedule_headings, max_col_width=35, auto_size_columns=True, display_row_numbers=False, justification='Left', num_rows=10, enable_events=True, enable_click_events=True, key='-SCHEDULE_TABLE-', row_height=35)] ] Schedule_info_window = sg.Window('Schedule Info', schedule_info_window_layout, modal=True) while True: event, values = Schedule_info_window.read() if event in (sg.WINDOW_CLOSED, 'Exit'): break if event == '-SCHEDULE_TABLE-': selected_row_idx = values['-SCHEDULE_TABLE-'][0] print(Schedule_List[selected_row_idx]) # 调用函数显示窗口 create_schedule(Schedule_List, schedule_headings)
内容的提问来源于stack exchange,提问作者Pephy
相关产品推荐
相关产品推荐

