首页 > 解决方案 > 根据参数按字段值对 CSV 文件中的数据进行分组

问题描述

我有一个 csv 文件被缩短,我想按下面的代码含义对列进行分组:

Sector,Ticker,Date,Open,High,Low,Close,Volume,OpenInt
Technology,ibm,1/2/62,6.413,6.413,6.3378,6.3378,467056,0
Technology,ibm,1/3/62,6.3378,6.3963,6.3378,6.3963,350294,0
Technology,apk,1/4/62,6.3963,6.3963,6.3295,6.3295,314365,0
Technology,ibm,1/5/62,6.3211,6.3211,6.1958,6.2041,440112,0
Technology,apk,1/8/62,6.2041,6.2041,6.0373,6.087,655676,0

输入命令行后输出的这个 - 以格式输出:

python OLAP.py --input input.csv --groupby ticker

ticker,Open,  High, Low,   Close, Volume,
ibm,   6.413, 6.413,6.3378,6.3378,467056
       6.3378,6.3963,6.3378,6.3963,350294
apk,   6.3963,6.3963,6.3295,6.3295,314365
       6.2041,6.2041,6.0373,6.087,655676

出于家庭作业的目的,我们不允许使用除 CSV、OS、sys、argparse 之外的任何其他导入我一直在按字段值查看 CSV 文件中的此组数据,以获得对其的一些洞察和理解,并尝试了一个实现:

def main():
   format_dict = {}
   args = parse_args()
   with open(args.filename, "r") as open_file:
       readers = csv.DictReader(open_file, delimiter = ',')
   if args.group_by is not None:
           for row in readers:
               for index in range(len(row)):
                   if args.group_by == row[index]:
                       if row[index] in format_dict:
                           index_inc = index + 1
                           format_dict[row[index]].append(row[index_inc])
                       else:   
                           index_inc = index + 1
                           format_dict[row[index]] = [row[index_inc]]
       print(format_dict)

但是我得到一个空字典

我目前只是在控制台上打印,看看我是否成功地将它正确分组并正确存储它。我不知道如何在不使用 pandas 的情况下解决这个问题,因为我看到 pandas 也很强大,但因为它是家庭作业,我们被禁止使用它。如果我能得到正确的方向或指示我的逻辑是错误的,那就太好了

标签: pythoncsvargparse

解决方案


推荐阅读