鱼C论坛

 找回密码
 立即注册
查看: 1898|回复: 7

[已解决]提取处理数据

[复制链接]
发表于 2023-7-19 10:52:07 | 显示全部楼层 |阅读模式

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

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

x
已知MON 文件夹中所有TXT文件有四列数据,每一列数据由空格隔开如
1959    1    0      19.40
1959    2    0     207.70
1959    3    0      99.10
1959    4    0     164.60
运用Python
1.首先在,三省站点.xlsx 文件中,遍历所有的‘站号’。(在三省站点.xlsx的A列)
2.根据已得‘区站号’,在 MON 文件夹下遍历出所有符合条件的TXT文件(每个文件名中都包含站号,为后五位数字),
3.将第二步所得所有(.txt)文件转为 excel 文件,excel 文件后缀要求.xlsx(所有涉及到的 excel 文件都要求后缀.xlsx),并且插入表头,‘Year’ ‘Mon’ ‘Day’ ‘PRE’。
4.遍历所有已得 excel 文件的开始年份(站点开始可能年份不一致),将所有站点的开始年份,写入到新的 excel 文件中,并将其命名为 Starting year,
最佳答案
2023-7-19 11:20:21
王book 发表于 2023-7-19 11:08
txt_files = [file for file in os.listdir('MON') if station[-5:] in file]
TypeError: 'float' objec ...


你得看你的三省站点.xlsx有没有站号这个表头,如果没有就在代码中替换成你的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-19 10:52:35 | 显示全部楼层
为了解答您的问题,我将提供一个Python代码示例来实现您的要求。在开始之前,需要确保您已经安装了所需的库,如pandasopenpyxl。您可以使用pip命令进行安装。
  1. import os
  2. import pandas as pd
  3. # 步骤1:读取三省站点.xlsx文件中的站号
  4. station_data = pd.read_excel('三省站点.xlsx')
  5. station_ids = station_data['站号'].tolist()
  6. # 步骤2:遍历MON文件夹,根据站号匹配TXT文件并转为Excel文件
  7. for station_id in station_ids:
  8.     # 根据站号获取符合条件的TXT文件
  9.     txt_files = [file for file in os.listdir('MON') if station_id[-5:] in file and file.endswith('.txt')]
  10.    
  11.     for txt_file in txt_files:
  12.         # 读取TXT文件数据
  13.         with open(os.path.join('MON', txt_file), 'r') as f:
  14.             lines = f.readlines()
  15.         
  16.         # 解析TXT文件数据并创建DataFrame
  17.         data = [line.split() for line in lines]
  18.         df = pd.DataFrame(data, columns=['Year', 'Mon', 'Day', 'PRE'])
  19.         
  20.         # 将数据保存为Excel文件
  21.         excel_file = txt_file.replace('.txt', '.xlsx')
  22.         df.to_excel(excel_file, index=False, header=['Year', 'Mon', 'Day', 'PRE'])
  23. # 步骤4:遍历所有Excel文件的开始年份,并写入新的Excel文件
  24. start_years = {}
  25. for excel_file in os.listdir('.'):
  26.     if excel_file.endswith('.xlsx'):
  27.         df = pd.read_excel(excel_file)
  28.         start_year = str(df['Year'].min())[:4]
  29.         start_years[excel_file] = start_year
  30. # 创建包含开始年份的DataFrame并保存为新的Excel文件
  31. start_years_df = pd.DataFrame(list(start_years.items()), columns=['Excel文件', '开始年份'])
  32. start_years_df.to_excel('Starting year.xlsx', index=False)
复制代码

请确保以下事项:

1. 确保三省站点.xlsx文件位于当前工作目录下,且包含一个名为站号的列。
2. 确保MON文件夹位于当前工作目录下,并包含所有的TXT文件。
3. 执行上述代码后,将会生成多个Excel文件和一个名为Starting year.xlsx的新Excel文件。

此代码将按照您的要求遍历站号、匹配TXT文件、转换为Excel文件,然后提取每个Excel文件的开始年份,并将其写入到Starting year.xlsx中。

请注意,以上代码仅提供了实现的思路,并未经过详细测试,可能需要根据您具体的数据和需求进行适当的修改。希望对您有所帮助!如有任何问题,请随时追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 10:52:47 | 显示全部楼层
首先,我们需要安装一些必要的Python库,如pandas、openpyxl和xlrd。在你的命令行中运行以下命令来安装它们:
  1. pip install pandas openpyxl xlrd
复制代码

然后,我们可以使用下面的Python代码来完成你的任务:
  1. import pandas as pd
  2. import os
  3. import glob
  4. # 读取三省站点.xlsx文件
  5. df_station = pd.read_excel('三省站点.xlsx')
  6. # 遍历所有的‘站号’
  7. for station in df_station['站号']:
  8.     # 在MON文件夹下遍历出所有符合条件的TXT文件
  9.     for file in glob.glob(f'MON/*{station}.txt'):
  10.         # 读取TXT文件
  11.         df = pd.read_csv(file, sep=' ', names=['Year', 'Mon', 'Day', 'PRE'])
  12.         
  13.         # 将TXT文件转为xlsx文件,并插入表头
  14.         df.to_excel(file.replace('.txt', '.xlsx'), index=False)
  15. # 遍历所有已得xlsx文件的开始年份
  16. starting_years = {}
  17. for file in glob.glob('MON/*.xlsx'):
  18.     df = pd.read_excel(file)
  19.     starting_years[file] = df['Year'].min()
  20. # 将所有站点的开始年份,写入到新的xlsx文件中
  21. df_starting_years = pd.DataFrame(list(starting_years.items()), columns=['站点', '开始年份'])
  22. df_starting_years.to_excel('Starting year.xlsx', index=False)
复制代码

首先,我们读取了"三省站点.xlsx"文件,并遍历了所有的'站号'。然后,我们在'MON'文件夹下遍历出所有符合条件的TXT文件,读取这些文件,并将它们转换为.xlsx文件,同时插入了表头。

然后,我们遍历了所有的.xlsx文件,找到了每个文件的开始年份,并将这些年份保存在了一个字典中。

最后,我们将这个字典转换为一个DataFrame,并将其保存为一个新的.xlsx文件,名为"Starting year.xlsx"。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 11:03:17 | 显示全部楼层
你可以使用以下Python代码来实现你提到的任务:
  1. import os
  2. import pandas as pd

  3. # 读取三省站点.xlsx文件
  4. station_file = '三省站点.xlsx'
  5. df_station = pd.read_excel(station_file)

  6. # 遍历所有站号
  7. for station in df_station['站号']:
  8.     # 根据区站号在MON文件夹下找到对应的TXT文件
  9.     txt_files = [file for file in os.listdir('MON') if station[-5:] in file]
  10.    
  11.     # 创建新的Excel文件,插入表头
  12.     excel_file = f'{station}_data.xlsx'
  13.     df_data = pd.DataFrame(columns=['Year', 'Mon', 'Day', 'PRE'])
  14.    
  15.     # 遍历所有TXT文件并将数据添加到Excel文件中
  16.     for txt_file in txt_files:
  17.         data = []
  18.         with open(os.path.join('MON', txt_file), 'r') as f:
  19.             for line in f:
  20.                 line = line.strip()
  21.                 if line:
  22.                     cols = line.split()
  23.                     data.append(cols)
  24.         df_temp = pd.DataFrame(data, columns=['Year', 'Mon', 'Day', 'PRE'])
  25.         df_data = pd.concat([df_data, df_temp])
  26.    
  27.     # 将数据保存为Excel文件
  28.     df_data.to_excel(excel_file, index=False)

  29. # 提取所有站点的开始年份
  30. starting_years = df_station['开始可能年份']

  31. # 创建新的Excel文件,写入开始年份,并命名为Starting year
  32. starting_year_file = 'Starting year.xlsx'
  33. df_starting_year = pd.DataFrame({'站号': df_station['站号'], '开始年份': starting_years})
  34. df_starting_year.to_excel(starting_year_file, index=False)
复制代码

请确保三省站点.xlsx文件和MON文件夹与上述代码在同一目录下,并且已经安装了pandas库。运行上述代码后,将会生成每个站点的数据Excel文件以及包含所有站点开始年份的Starting year.xlsx文件。


注:此回答由 GPT 生成,其他类似回答也是 GPT 生成,仅供参考。如果遇到非 GPT 回答请优先采纳。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 11:07:56 | 显示全部楼层
isdkz 发表于 2023-7-19 10:52
首先,我们需要安装一些必要的Python库,如pandas、openpyxl和xlrd。在你的命令行中运行以下命令来安装它们 ...

运行结果为空表,是否是读取TXT文件出问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 11:08:43 | 显示全部楼层
歌者文明清理员 发表于 2023-7-19 11:03
你可以使用以下Python代码来实现你提到的任务:

请确保三省站点.xlsx文件和MON文件夹与上述代码在同一目 ...

txt_files = [file for file in os.listdir('MON') if station[-5:] in file]
TypeError: 'float' object is not subscriptable
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 11:20:21 | 显示全部楼层    本楼为最佳答案   
王book 发表于 2023-7-19 11:08
txt_files = [file for file in os.listdir('MON') if station[-5:] in file]
TypeError: 'float' objec ...


你得看你的三省站点.xlsx有没有站号这个表头,如果没有就在代码中替换成你的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 16:27:30 | 显示全部楼层
过来学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 05:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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