2016-06-14 97 views
0

我想將一個CSV文件導入由逗號(,)分隔的python。導入CSV並在Python中爲每列創建一個列表

每一列是一個採樣的參數,例如列0是時間,在一次的第二採樣,塔1的高度在第二4次採樣,等等

所以列將看起來如下:

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

我的想法是爲捕獲其名稱及其所有數據的每個列創建一個列表。這樣我可以做計算和自動組織我的數據到一個新的文件(我正在使用的採樣數據有10幾千行)

我想這樣做的任何文件不只是一個,所以數量列可以變化。

通常如果每一個文件是一致的,我會做這樣的:

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 

我在蟒蛇相當新的像我5.請給我講這是解決這個的好方法,如果不是什麼是更好的方法?

謝謝你的時間。

+0

使用一個字典持有所有可能的列(列表)。採取一個內部for循環,'爲我,在枚舉(行)val:'...'我'表示您當前的列。嘗試插入'val',如果出現鍵錯誤,則在dict中放置一個新列表,然後插入。 – Christoph

+0

可能值得你爲這種類型的工作尋找「熊貓」圖書館。 http://pandas.pydata.org/pandas-docs/stable/10min.html; http://pandas.pydata.org/pandas-docs/version/0.18.1/tutorials.html – Nicarus

回答

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. 
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]) 

我無法弄清楚如何寫我的新名單「頭」,其插值和列A替換我的舊文件test2.csv。

Anywho非常感謝您尋找...

相關問題