Используя список файлов для создания массива? - PullRequest
0 голосов
/ 14 мая 2018

Итак, у меня есть группа файлов с разделителями табуляции, которые имеют следующий формат:

enter image description here

и я хочу создать файл / таблицу с разделением табуляцией, которая показывает частоту каждого значения (в данном случае, фруктов) в зависимости от того, появляются ли они в каких конкретных файлах:

enter image description here

Мой первоначальный подход к этой проблеме состоял в том, чтобы хранить каждый фрукт в 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 в качестве структуры данных, поскольку вы можете изменять отдельные элементы в массиве (я полагаю).

Есть ли способ проверить, есть ли конкретный фрукт в качестве ассоциированного значения частоты в каждом из файлов и, если да, каков будет лучший способ сделать это, а также экспортировать эту информацию?

1 Ответ

0 голосов
/ 14 мая 2018

Имхо, похоже, вы хотите использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...