2017-10-17 69 views
0
import csv 
import matplotlib.pyplot as plt 

filename = r"C:\Users\name\Desktop\sampledata.csv" 

with open(filename, newline='') as file: 
    reader = csv.reader(file) 
    header = next(reader) 
    data = [] 
    for row in reader: 
     measured_time = float(row[0]) 
     wv1 = float(row[1]) 
     wv2 = float(row[2]) 
     data.append([measured_time, wv1,wv2]) 

time=data[0] 
y1=data[1] 

plt.plot(time,y1) 

plt.show() 

工作得很好,但因为这是在我处理真实数据之前进行的测试。当specyfing定界符时导入csv数据行和列

现在真实数据没有标题,只包含2列。

import csv 
import matplotlib.pyplot as plt 

filename = r"C:\Users\name\Desktop\real_data.csv" 

with open(filename, newline='') as file: 
    reader = csv.reader(file,delimiter=';') 
    data = [] 
    for row in reader: 
     measured_time = float(row[0]) 
     wv1 = float(row[1]) 
     data.append([measured_time, wv1]) 

time=data[0] 
y1=data[1] 

plt.plot(time,y1) 

plt.show() 

这产生

时间= [100.1]

Y1 = [110,2]

所以基本上只是第2行,而第一码块正确地提取的列

时间= [100 110 ...]

Y1 = [1 2 ...]

同样的事情发生时,我使用

import csv 
import matplotlib.pyplot as plt 

filename = r"C:\Users\name\Desktop\sampledata.csv" 

with open(filename, newline='') as file: 
    reader = csv.reader(file) 
    header = next(reader) 
    data = [] 
    for row in reader: 
     measured_time = float(row[0]) 
     wv1 = float(row[1]) 
     data.append([measured_time, wv1]) 

time=data[0] 
y1=data[1] 

plt.plot(time,y1) 

plt.show() 

现在我的解决办法是

data = np.array(data).astype("float") 


time=data[:,0] 
y1=data[:,1] 

当然,必须有一个更好的办法,我刚开始使用Python。

数据使用:

sample data 
Time,279 nm,306 nm 
0,100,150 
1,110,175 
2,125,230 
3,130,245 

real data 
3.986931e+002;0.000000e+000 
4.021733e+002;0.000000e+000 
+0

是';'在文件中使用了分隔符吗?你确定你没有错误的数据文件? – Laszlowaty

+0

你可以添加几行从真实文件到帖子 – Marco

+0

@Laszlowaty是的;是真实数据中的分隔符,我会排除错误,因为我提到的解决方法是有效的。 @ Marco完成 – idkfa

回答

1

list(zip())允许traspose一组序列:

time = [100, 1] 
y1 = [110, 2] 
l = list(zip(time, y1)) 
print(l) # [(100, 110), (1, 2)] 
time = l[0] # (100, 110) 
y1 = l[1] # (1, 2) 

他们的元组,可以为列表使用,也可以将其转换到列表:

time = list(l[0]) # [100, 110] 
y1 = list(l[1]) # [1, 2] 

如果你想让他们直接进入相反的形式,你可以交换读取部分:

import csv 
import matplotlib.pyplot as plt 

filename = r"C:\Users\name\Desktop\sampledata.csv" 

with open(filename, newline='') as file: 
    reader = csv.reader(file) 
    # header = next(reader) 
    time = [] 
    y1 = [] 
    for row in reader: 
     time.append(float(row[0])) 
     y1.append(float(row[1])) 

plt.plot(time,y1) 

plt.show() 
+0

你能说一说我究竟做了什么改变吗?我真的不明白为什么它不会按照我写的方式工作。 – idkfa

+0

提供csv文件的第一行,我会详细说明,不知道第一行,我只能提供一种转换列表的方式。 – Adirio

+0

根据marco的要求,我更早地更新了我的问题,您在真实数据下看到的是我正在使用的csv的前两行。您在示例数据下看到的是完整集合。 – idkfa