2017-10-17 31 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