鱼C论坛

 找回密码
 立即注册
查看: 645|回复: 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实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

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

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

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

# 遍历每个Excel文件
for file_path in file_paths:
    # 读取当前Excel文件的数据
    df_qd = pd.read_excel(file_path)
    
    # 获取事件开始时间列的数据
    start_times = df_qd.iloc[:, 2]

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

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

5. 最后,将结果保存到新的Excel文件中,名字为原名字+AO。
# 定义保存结果的文件名
result_file = file_path.replace('.xlsx', '') + 'AO.xlsx'

# 将结果保存到新的Excel文件中
filtered_data.to_excel(result_file, index=False)

综合起来,完整的代码如下所示:
import os
from datetime import datetime, timedelta
import pandas as pd

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

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

# 遍历每个Excel文件
for file_path in file_paths:
    # 读取当前Excel文件的数据
    df_qd = pd.read_excel(file_path)
    
    # 获取事件开始时间列的数据
    start_times = df_qd.iloc[:, 2]
    
    # 根据事件开始时间查找对应的AO值
    for start_time in start_times:
        # 将事件开始时间转换为日期对象
        start_date = datetime.strptime(start_time, '%Y-%m-%d')
        
        # 计算提前一个月的日期
        prev_month = start_date - timedelta(days=30)
        
        # 根据年份和月份过滤AO.xlsx中的数据
        filtered_data = df_ao[(df_ao['Year'] == prev_month.year) & (df_ao['Mon'] == prev_month.month)]
        
        # 获取满足条件的AO值
        ao_values = filtered_data['AO']
        
        # 处理获取到的AO值...
        
        # 定义保存结果的文件名
        result_file = file_path.replace('.xlsx', '') + 'AO.xlsx'
        
        # 将结果保存到新的Excel文件中
        filtered_data.to_excel(result_file, index=False)

希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

月份计算应该是月份-1而不是差30天该怎么修改此代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


非常抱歉,我在计算提前一个月的日期时确实犯了错误,应该是需要将月份减1。在代码中,你可以将以下行:
prev_month = start_date - timedelta(days=30)
修改为:
prev_month = start_date.replace(month=start_date.month-1)
if start_date.month == 1: # 考虑跨年的情况
    prev_month = prev_month.replace(year=start_date.year-1, month=12)
这样就可以正确地计算提前一个月的日期,并找到对应的AO值了。完整的代码如下:
import os
from datetime import datetime, timedelta
import pandas as pd

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

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

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

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

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

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

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

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

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

        # 将结果保存到新的Excel文件中
        ao_values.to_excel(result_file, index=False)

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-20 10:36:07 From FishC Mobile | 显示全部楼层
你这需要发原始文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 22:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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