微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

合并来自不同数据结构和文件格式的数据 示例 1示例 2示例 3

如何解决合并来自不同数据结构和文件格式的数据 示例 1示例 2示例 3

背景

我从数十家电视台收到了非常相似的关于我们广告费用的信息。所有数据都采用不同的文件格式(.pdf、.xlsx、.csv、.xls 等)。此外,各种文件格式中的数据也有不同的结构。最终目标是以一致的格式获取所有数据,以便我可以将它们全部合并到一个数据帧中。以下是我通过 Pandas 导入后 A 站数据可能是什么样子的示例:

示例 1

车站 日期 时间 成本
A站 2/28/2021 5:45p $1000
A站 2/28/2021 4:27p $1000
A站 2/28/2021 4:45A $1000
A站 2/28/2021 12:35p $1000

以下是另外两个示例,说明将相同的基础信息(车站、日期、时间、成本)导入数据帧时如何输入:

示例 2

车站 日期 时间 成本
B站
2/28/2021
凌晨4:45 $150
2:33pm $245
10:35pm $245
11:11pm $300

示例 3

车站
C站
日期
2/28/2021
时间 成本
凌晨 4:23 $123
2:35 PM $345
1:46 PM $345
14:18 PM $345

目标

我主要使用 Pandas 来解析和提取它进来的各种形式的数据。我可以处理解析/清理数据,尽管可以随意分享关于以这种不一致的方式从多个接收数据的任何建议来源。我的首要任务是获得有关构建该项目的最佳方式的反馈,以便于阅读和扩展。将来我需要能够容纳更多的车站。

我目前的计划

理想情况下,如果所有数据都像第一个示例一样,表格数据集,我会很高兴。我已经要求电台以这种格式发送数据。一些站满足该请求,而其他站不能或不会更改格式。可能是因为它最终是自动化的,更改它会很麻烦。

项目文件夹和 Python 文件结构

在结构方面,我计划这样设置我的项目:

  • project_folder
    • main_parser.py
    • general_helper_functions.py
    • parser_folder
      • station_a_parser.py
      • station_b_parser.py
      • station_c_parser.py

此外,我计划设置文件夹,用于存储各种站数据。提醒一下,站数据文件有不同的格式(.pdf、.xlsx、.csv、.xls 等)

  • station_data_folder
    • station_a_folder
      • station_a_02.28.21.csv
    • station_b_folder
      • 02.28.21_station_b.pdf
    • station_c_folder
      • station_c_02.28.21.xls

此外,站点数据文件名称也不是很好。站文件将手动组织到文件夹中

主解析器脚本

在 main_parser.py 中,我计划有一个很长的 if 语句,这部分让我觉得必须有更好的方法来构建这个项目。我将遍历 station_data_folder 中的每个 station_folder 并从相应的 station_X_parser.py 调用主解析器函数

顾名思义,general_helper_functions.py 将用于存储所有通用函数,例如:

这是脚本的粗略版本:

main_df = pd.DataFrame()

for station_folder in station_data_folder:
     if station_folder == 'station_a_folder':
          file_path = general_helper_functions.get_file_path(station_folder)
          temp_df = station_a_parser.main(file_path)
          main_df = main_df.append(temp_df)

     if station_folder == 'station_b_folder':
          file_path = general_helper_functions.get_file_path(station_folder)
          temp_df = station_b_parser.main(file_path)
          main_df = main_df.append(temp_df)

     if station_folder == 'station_c_folder':
          file_path = general_helper_functions.get_file_path(station_folder)
          temp_df = station_c_parser.main(file_path)
          main_df = main_df.append(temp_df)

     # I plan to expand the if statement for every station

return main_df

我的问题

鉴于我接收不一致和多源数据的方式,是否有更好的方法来构建我的项目?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。