我正在尝试将CSV文件导入到由逗号(,)分隔的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中的新手,请像我一样对我说话。这是一个解决这个问题的好方法,如果不是更好的方法论吗?
感谢您的时间。
答案 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。
任何人非常感谢你寻找......