Многочисленные списки из одного источника файла CSV - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь использовать списки для получения определенных столбцов из CSV-файла.

Вот код, который имитирует данные файла CSV, которые я вижу:

import pandas as pd
import numpy as np

# Setup of simulated data
seconds = [1,2,3]
values = [0.5,0.4,0.3]
non_relevant_data = [8,6,7]
nanos = [5757,6767,7777]
dataset=list(zip(seconds,values,non_relevant_data,nanos))
df = pd.DataFrame(data=dataset)
df.to_csv('data.csv',index=False,header=False,name=None)
table=pd.read_csv('data.csv',header=None).itertuples(index=False,name=None)

Вот что я пытаюсь сделать:

# Getting each column in the table using list comprehensions
secs = np.array([row[0] for row in table])
vals = np.array([row[1] for row in table])
nano = np.array([row[3] for row in table])

print secs
print vals
print nano

Вот результат:

[1 2 3]
[]
[]

Если я закомментирую объект понимания списка секунд и оставлю переменные vals и nano без комментариев, это будет результат:

[0.5 0.4 0.3]
[]

Если я использую цикл for и pre-определить secs, vals и nano-массивы, я могу заставить код работать, но это не очень элегантно.

Я тоже попробовал это, не используя numpy, но это дало тот же результат.

Я очень запутался, почему в этой конфигурации не работают описания списков.

Может кто-нибудь объяснить, почему это не работает, или порекомендовать что-нибудь еще попробовать?

Спасибо

1 Ответ

0 голосов
/ 29 октября 2018

Попробуйте вместо этого:

table=pd.read_csv('data.csv', header=None)

secs = np.array([row[0] for row in table.itertuples(index=False,name=None)])
vals = np.array([row[1] for row in table.itertuples(index=False,name=None)])
nano = np.array([row[3] for row in table.itertuples(index=False,name=None)])

Причина, по которой ваша версия не работает, заключается в том, что itertuples создает объект zip (итератор именованных кортежей, представляющих строки), который можно повторить один раз.Таким образом, вы должны создать новый для каждого из списков пониманий secs, vals, nano.

...