导入CSV并为Python中的每列创建一个列表

时间:2016-06-14 21:29:40

标签: python csv variables dynamic

我正在尝试将CS​​V文件导入到由逗号(,)分隔的python中。

每列都是一个采样参数,例如第0列是时间,每秒一次采样,第1列是每秒4次高度采样,等等。

所以列将如下所示:

Column 0 -> ["Time", 0, " "," "," ",1] 
Column 1 -> ["Altitude", 100, 200, 300, 400]

我的想法是为每个列创建一个列表,用于捕获其名称及其所有数据。这样我就可以自动进行计算并将数据组织成一个新文件(我正在使用的采样数据有数万行)

我想对任何文件执行此操作,而不仅仅是一个文件,因此列数可能会有所不同。

通常如果每个文件都是一致的,我会做类似的事情:

import csv
time =[]
alt = []
dct = {}
with open('test.csv',"r") as csvfile:
    csv_f = csv.reader(csvfile)
    for row in csv_f:
        header.append(row[0])
        alt.append(row[1]) #etc for all columns

我是python中的新手,请像我一样对我说话。这是一个解决这个问题的好方法,如果不是更好的方法论吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

熊猫可能最适合你。如果您使用pandas中的csv_read,它将根据列创建一个DataFrame。它大致是一个列表字典。

如果你想要一个专门的列表,你也可以使用pandas的.tolist()功能将它转换为一个列表。

import pandas as pd
data = pd.read_csv("soqn.csv")
dict_of_lists = {}

for column_name in data.columns:
    temp_list = data[column_name].tolist()
    dict_of_lists[column_name] = temp_list

print dict_of_lists

EDIT: 
dict_of_lists={column_name: data[column_name].tolist() for column_name in data.columns}
#This list comprehension might work faster.

答案 1 :(得分:0)

我认为我的问题更简单,只关注一个专栏。

我最终想做的是插值到最高采样率。所以这就是我想出来的......如果我能做更有效率的事情,请告诉我。我在这个网站上使用了很多搜索来帮助构建这个。再一次,我是Python新手(大约2-3周,但有些以前的编程经验)

import csv
header = []
#initialize variables
loc_int = 0
loc_fin = 0
temp_i = 0
temp_f = 0

with open('test2.csv',"r") as csvfile: # open csv file
    csv_f = csv.reader(csvfile)
    for row in csv_f:
        header.append(row[0]) #make a list that consists of all content in column A

for x in range(0,len(header)-1): #go through entire column

    if header[x].isdigit() and header[x+1]=="": # find lower bound of sample to be interpolated
        loc_int = x
        temp_i = int(header[x])

    elif header[x+1].isdigit() and header[x]=="": # find upper bound of sample to be interpolated

        loc_fin = x
        temp_f = int(header[x+1])

    if temp_f>temp_i: #calculate interpolated values
        f_min_i = temp_f - temp_i
        interp = f_min_i/float((loc_fin+1)-loc_int)

        for y in range(loc_int, loc_fin+1):
            header[y] = temp_i + interp*(y-loc_int)

print header

with open("output.csv", 'wb') as g: #write to new file
    writer = csv.writer(g)
    for item in header:
        writer.writerow([item])

我无法弄清楚如何使用插值来编写新列表“header”,并将其替换为旧文件的列A,test2.csv。

任何人非常感谢你寻找......