【问题标题】:Using a list of files to create an array?使用文件列表创建数组?
【发布时间】:2018-05-14 15:44:07
【问题描述】:

所以我有一组制表符分隔的文件,格式如下:

我想创建一个制表符描述的文件/表格,根据它们是否出现在哪些特定文件中显示每个值(在本例中为水果)的频率:

我最初解决这个问题的方法是将每个水果存储在一个 defaultdict 中,并将文件名和频率计数附加到文件中,如下所示:

import glob, os
from collections import defaultdict

file_list = glob.glob(input_directory + '*.txt')

master_list = defaultdict(list)
for file in file_list:
    shortname = os.path.basename(file)
    with open(file) as input:
        for line in file:
            info = line.rstrip().split('\t')
            fruit,frequency = info[0],info[1]
            master_list[fruit].append((shortname,frequency))

但是在收集了所有这些信息之后,我对如何检查某个特定文件中是否存在特定水果并输出它并没有太多想法。

我最初考虑使用 numpy 数组作为我的数据结构,因为您可以修改数组中的各个元素(我相信)。

有没有办法在每个文件中检查特定水果是否作为关联的频率值,如果是,那么最好的方法是什么以及导出该信息?

【问题讨论】:

    标签: python arrays file numpy dictionary


    【解决方案1】:

    恕我直言,您似乎想使用pandas。您可以定义一个DataFrame 并将每个文件的频率附加为一列。

    import pandas as pd
    
    master_list = pd.DataFrame(index=['Apples', 'Oranges', 'Pears', 'Bananas'])
    for file in file_list:
        shortname = os.path.basename(file)
        master_list = master_list.join(
            pd.DataFrame(index=master_list.index,
                         data={file: np.zeros(master_list.index.size)}))
        with open(file) as input:
            for line in file:
                info = line.rstrip().split('\t')
                fruit, frequency = info[0], info[1]
                master_list[file][fruit] += frequency
    

    如果不计算频率,则需要将最后一行master_list[file][fruit] += frequency替换为master_list[file][fruit] = frequency

    【讨论】:

      猜你喜欢
      • 2014-01-01
      • 1970-01-01
      • 2020-08-04
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多