鱼C论坛

 找回密码
 立即注册
查看: 1183|回复: 4

tiqu

[复制链接]
发表于 2024-4-20 10:15:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
已知在F:/yxg/qd中的所有Excel文件的第三列为事件开始时间,其格式为YYYY-MM-DD,每一行代表一个事件F:/yxg/excle中AO.xlsx第一列名为Year是年份,第二列名为Mon是月份,第三列为AO是AO值,现要根据F:/yxg/qd中的所有Excel文件的事件开始时间,在F:/yxg/excle中AO.xlsx找每一个事件比事件开始时间提前一个月的AO值,遥考虑到跨年的情况,结果保存到新的Excel中,名字为原名字+AO,运用Python完成已知在F:/yxg/qd中的所有Excel文件的第三列为事件开始时间,其格式为YYYY-MM-DD,每一行代表一个事件F:/yxg/excle中AO.xlsx第一列名为Year是年份,第二列名为Mon是月份,第三列为AO是AO值,现要根据F:/yxg/qd中的所有Excel文件的事件开始时间,在F:/yxg/excle中AO.xlsx找每一个事件比事件开始时间提前一个月的AO值,遥考虑到跨年的情况,结果保存到新的Excel中,名字为原名字+AO,该如何运用Python实现
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-4-20 10:15:39 | 显示全部楼层
你好!要实现这个需求,可以按照以下步骤进行:

1. 首先,需要安装pandas和xlrd这两个库,可以使用以下命令进行安装:
  
  1. pip install pandas xlrd
复制代码


2. 然后,我们可以使用pandas库来处理Excel文件。首先读取F:/yxg/excle中的AO.xlsx文件,获取该文件中的所有数据。

  1. import pandas as pd

  2. # 读取AO.xlsx文件的数据
  3. df_ao = pd.read_excel('F:/yxg/excle/AO.xlsx')
复制代码


3. 接下来,我们需要遍历F:/yxg/qd文件夹中的所有Excel文件,并读取每个文件的事件开始时间。

  1. import os

  2. # 获取F:/yxg/qd文件夹中的所有Excel文件路径
  3. folder_path = 'F:/yxg/qd'
  4. file_paths = []
  5. for root, dirs, files in os.walk(folder_path):
  6.     for file in files:
  7.         if file.endswith('.xlsx'):
  8.             file_paths.append(os.path.join(root, file))

  9. # 遍历每个Excel文件
  10. for file_path in file_paths:
  11.     # 读取当前Excel文件的数据
  12.     df_qd = pd.read_excel(file_path)
  13.    
  14.     # 获取事件开始时间列的数据
  15.     start_times = df_qd.iloc[:, 2]
复制代码


4. 对于每个事件开始时间,我们需要根据其提前一个月的日期来查找对应的AO值。

  1. from datetime import datetime, timedelta

  2. # 根据事件开始时间查找对应的AO值
  3. for start_time in start_times:
  4.     # 将事件开始时间转换为日期对象
  5.     start_date = datetime.strptime(start_time, '%Y-%m-%d')
  6.    
  7.     # 计算提前一个月的日期
  8.     prev_month = start_date - timedelta(days=30)
  9.    
  10.     # 根据年份和月份过滤AO.xlsx中的数据
  11.     filtered_data = df_ao[(df_ao['Year'] == prev_month.year) & (df_ao['Mon'] == prev_month.month)]
  12.    
  13.     # 获取满足条件的AO值
  14.     ao_values = filtered_data['AO']
  15.    
  16.     # 处理获取到的AO值...
复制代码


5. 最后,将结果保存到新的Excel文件中,名字为原名字+AO。

  1. # 定义保存结果的文件名
  2. result_file = file_path.replace('.xlsx', '') + 'AO.xlsx'

  3. # 将结果保存到新的Excel文件中
  4. filtered_data.to_excel(result_file, index=False)
复制代码


综合起来,完整的代码如下所示:

  1. import os
  2. from datetime import datetime, timedelta
  3. import pandas as pd

  4. # 读取AO.xlsx文件的数据
  5. df_ao = pd.read_excel('F:/yxg/excle/AO.xlsx')

  6. # 获取F:/yxg/qd文件夹中的所有Excel文件路径
  7. folder_path = 'F:/yxg/qd'
  8. file_paths = []
  9. for root, dirs, files in os.walk(folder_path):
  10.     for file in files:
  11.         if file.endswith('.xlsx'):
  12.             file_paths.append(os.path.join(root, file))

  13. # 遍历每个Excel文件
  14. for file_path in file_paths:
  15.     # 读取当前Excel文件的数据
  16.     df_qd = pd.read_excel(file_path)
  17.    
  18.     # 获取事件开始时间列的数据
  19.     start_times = df_qd.iloc[:, 2]
  20.    
  21.     # 根据事件开始时间查找对应的AO值
  22.     for start_time in start_times:
  23.         # 将事件开始时间转换为日期对象
  24.         start_date = datetime.strptime(start_time, '%Y-%m-%d')
  25.         
  26.         # 计算提前一个月的日期
  27.         prev_month = start_date - timedelta(days=30)
  28.         
  29.         # 根据年份和月份过滤AO.xlsx中的数据
  30.         filtered_data = df_ao[(df_ao['Year'] == prev_month.year) & (df_ao['Mon'] == prev_month.month)]
  31.         
  32.         # 获取满足条件的AO值
  33.         ao_values = filtered_data['AO']
  34.         
  35.         # 处理获取到的AO值...
  36.         
  37.         # 定义保存结果的文件名
  38.         result_file = file_path.replace('.xlsx', '') + 'AO.xlsx'
  39.         
  40.         # 将结果保存到新的Excel文件中
  41.         filtered_data.to_excel(result_file, index=False)
复制代码


希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-20 10:35:02 | 显示全部楼层
FishC 发表于 2024-4-20 10:15
你好!要实现这个需求,可以按照以下步骤进行:

1. 首先,需要安装pandas和xlrd这两个库,可以使用以下 ...

月份计算应该是月份-1而不是差30天该怎么修改此代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-20 10:35:25 | 显示全部楼层
王大可2000 发表于 2024-04-20 10:35
月份计算应该是月份-1而不是差30天该怎么修改此代码


非常抱歉,我在计算提前一个月的日期时确实犯了错误,应该是需要将月份减1。在代码中,你可以将以下行:
  1. prev_month = start_date - timedelta(days=30)
复制代码

修改为:
  1. prev_month = start_date.replace(month=start_date.month-1)
  2. if start_date.month == 1: # 考虑跨年的情况
  3.     prev_month = prev_month.replace(year=start_date.year-1, month=12)
复制代码

这样就可以正确地计算提前一个月的日期,并找到对应的AO值了。完整的代码如下:

  1. import os
  2. from datetime import datetime, timedelta
  3. import pandas as pd

  4. # 读取AO.xlsx文件的数据
  5. df_ao = pd.read_excel('F:/yxg/excle/AO.xlsx')

  6. # 获取F:/yxg/qd文件夹中的所有Excel文件路径
  7. folder_path = 'F:/yxg/qd'
  8. file_paths = []
  9. for root, dirs, files in os.walk(folder_path):
  10.     for file in files:
  11.         if file.endswith('.xlsx'):
  12.             file_paths.append(os.path.join(root, file))

  13. # 遍历每个Excel文件
  14. for file_path in file_paths:
  15.     # 读取当前Excel文件的数据
  16.     df_qd = pd.read_excel(file_path)

  17.     # 获取事件开始时间列的数据
  18.     start_times = df_qd.iloc[:, 2]

  19.     # 根据事件开始时间查找对应的AO值
  20.     for start_time in start_times:
  21.         # 将事件开始时间转换为日期对象
  22.         start_date = datetime.strptime(start_time, '%Y-%m-%d')

  23.         # 计算提前一个月的日期
  24.         prev_month = start_date.replace(month=start_date.month-1)
  25.         if start_date.month == 1: # 考虑跨年的情况
  26.             prev_month = prev_month.replace(year=start_date.year-1, month=12)

  27.         # 根据年份和月份过滤AO.xlsx中的数据
  28.         filtered_data = df_ao[(df_ao['Year'] == prev_month.year) & (df_ao['Mon'] == prev_month.month)]

  29.         # 获取满足条件的AO值
  30.         ao_values = filtered_data['AO']

  31.         # 处理获取到的AO值...
  32.         
  33.         # 定义保存结果的文件名
  34.         result_file = file_path.replace('.xlsx', '') + 'AO.xlsx'

  35.         # 将结果保存到新的Excel文件中
  36.         ao_values.to_excel(result_file, index=False)
复制代码


现在,代码中的日期计算应该是正确的,它将根据事件开始时间查找提前一个月的AO值,并将结果保存到新的Excel文件中。希望这次的修改能够帮助到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-20 10:36:07 From FishC Mobile | 显示全部楼层
你这需要发原始文件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-8 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表