问题描述
背景
我从数十家电视台收到了非常相似的关于我们广告费用的信息。所有数据都采用不同的文件格式(.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
-
station_a_folder
此外,站点数据文件的名称也不是很好。站文件将手动组织到文件夹中
主解析器脚本在 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 (将#修改为@)