Как извлечь данные из CSV по заголовку столбца - PullRequest
0 голосов
/ 31 января 2020

У меня есть CSV-файлы (разделенные табуляцией), которые я хочу проанализировать и построить график. Я могу извлечь данные из файлов, но я бы предпочел сделать это, используя имя заголовка столбца, а не обычное индексирование.

т.е. вместо:

freq_data = my_data[:,0]

я бы использовал что-то вроде :

freq2_data=dataA['Freq']

, который дал бы мне только этот столбец данных без 'nan' для верхнего поля. Я хочу сделать это таким образом, если некоторые люди упорядочивают данные по-разному.

В настоящее время у меня есть:

import os
import csv
import numpy as np
from numpy import genfromtxt

def mylistdir(directory):
    """A specialized version of os.listdir() that ignores files that
    start with a leading period."""
    filelist = os.listdir(directory)
    return [x for x in filelist
            if not (x.startswith('.'))]
path = ("C:\\Users\\priper\\Desktop\\rough_data\\")
results_files = mylistdir(path)
print(results_files)


vel_data = []

for f in results_files:
    f = path + f
    my_data = np.genfromtxt(f, dtype = float, delimiter='\t') #, names = True, max_rows=1
    print(my_data)
    freq_data = my_data[:,0]
    height_data = my_data[:,1]
    width_data = my_data[:,2]
    time_data = my_data[:,3]
    freq2_data=dataA['Freq']
    print(width_data)
    print(freq2_data)

Есть какие-нибудь идеи относительно того, что я могу сделать?

файл csv:

Freqheight_cmsWidth_cmsTime_secs
"998.2121573301549  44.08897100772889   6.445672191528545   90.0"
"998.2121573301549  46.34952337794475   6.49171270718232    90.0"
"998.2121573301549  39.7907973252776    6.49171270718232    90.0"
"1999.404052443385  42.986804623146725  6.445672191528545   90.0"
"1999.404052443385  38.76177273904744   6.49171270718232    90.0"
"1999.404052443385  46.34952337794475   6.491875969369261   89.59365376669096"
"2997.61620977354   44.08897100772889   6.491875969369261   89.59365376669096"
"2997.61620977354   42.986804623146725  6.537915335317934   89.59651526494126"
"2997.61620977354   44.08897100772889   6.49171270718232    90.0"
"3998.80810488677   47.50820176059876   6.307550644567219   90.0"
"3998.80810488677   46.34952337794475   6.3535911602209945  90.0"
"3998.80810488677   41.903151251584184  6.3997972870975675  89.58780725859766"
"5000.0 38.76177273904744   6.21564013134898    89.57559458063852"
"5000.0 44.08897100772889   6.261510128913444   90.0"
"5000.0 41.903151251584184  6.2616793932272925  89.57871509583141"
"5998.212157330155  33.881963382336906  6.077522459688805   89.5659493678606"
"5998.212157330155  47.50820176059876   5.985444111277719   89.55927192723898"
"5998.212157330155  53.59203690324092   6.123388581952118   90.0"

Это то, что сработало после прочтения ответов и советов, данных ниже пользователями.

for f in results_files:
    f = path + f
    data = pd.read_csv(f, sep = '\t')
    length_of_data = len(data)
    print(data.head(length_of_data))
    freqy = data[['Freq']]
    print(freqy)

1 Ответ

0 голосов
/ 31 января 2020

Использовать библиотеку pandas: https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.read_csv.html

import pandas as pd

my_csv = pd.read_csv(filepath, header, names)

"Заголовок: int или список целых чисел, по умолчанию 'infer'

Номера строк для использования в качестве имен столбцов и начала данных. Поведение по умолчанию - вывод имен столбцов: если имена не переданы, поведение идентично header = 0, а имена столбцов выводятся из первая строка файла, если имена столбцов передаются явно, то поведение идентично header = None. Явно передайте header = 0, чтобы иметь возможность заменить существующие имена. Заголовок может быть списком целых чисел, которые указывают расположение строк для multi-index для столбцов, например, [0,1,3]. Промежуточные строки, которые не указаны, будут пропущены (например, 2 в этом примере пропущено). Обратите внимание, что этот параметр игнорирует закомментированные строки и пустые строки, если skip_blank_lines = True, поэтому header = 0 обозначает первую строку данных, а не первую строку файла.

имена: как у массива, по умолчанию нет

Список имен столбцов для использования Я Если файл не содержит строку заголовка, то вы должны явно передать header = None. Дубликаты в этом списке приведут к выдаче предупреждения пользователя. "

...