2017-07-05 68 views
0

我讀過一個csv文件('Air.csv')並執行了一些操作來擺脫標題(不重要)。然後,我使用dB_a.append(行[1])將csv數據的這一列放入一個數組中,我稍後可以繪製它。如何對導入的csv數據進行數學運算?

這個數據是dB數據,我想用每個數值的簡單方程P = 10 ^(dB/10)將其轉換爲功率。我對Python很陌生,所以我不太瞭解數組,列表等操作是如何工作的。我認爲我需要做的是遍歷整個數據集,這是我在for循環的嘗試,但我仍然收到錯誤。有什麼建議麼?

謝謝!

frequency_a=[] 
dB_a=[] 

a = csv.reader(open('Air.csv')) 

for row in itertools.islice(a, 18, 219): 
     frequency_a.append(row[0]) 
     dB_a.append(row[1]) 
     #print(frequency_a) 
     print(dB_a) 

for item in dB_a: 
    power_a = 10**(dB_a/10) 
    print(power_a) 
+0

你知道嗎[pandas](http://pandas.pydata.org)?我認爲它可以幫助你很多。 – Quickbeam2k1

回答

0

建立在Jaras發佈的答案上。

power_a = [10*(db/10) for db in dB_a] 是不正確的,因爲這除以10,然後乘以相同。

它應該是: power_a = [10**(db/10) for db in dB_a]

現金還是去@Ed Jaras雖然

注: 如果你想知道這個[列表中的一些東西]是什麼,它是一個列表理解。它們是python允許的令人驚歎的優雅構造。

基本上的意思是[..將這個元素添加到.. ..元素的結果.. ..列表中..]。

如果你願意,你甚至可以添加條件。

如果您想了解更多關於他們的,我建議你檢查出: http://www.secnetix.de/olli/Python/list_comprehensions.hawk

增加: @ K-施耐德:你可能做的數值運算(分,功率等)上的繩子,這是因爲在導入csv時,可能會將字段導入爲字符串。 要確保您使用整數,您可以通過執行db db到一個字符串: str(db)

+0

謝謝!這是有道理的,但是我仍然收到錯誤:「不支持的操作數類型(s)爲/:'str'和'int'」。 –

+0

@ K.Schneider我在帖子中添加了對該問題的回答 –

+0

明白了。謝謝! –

1

在你的for循環中,item是迭代器,所以你需要使用它。因此,而不是:

power_a = 10**(dB_a/10) 

使用:

power_a = 10**(item/10) 

一個更好的方式來創建與該數據的新列表可能是:

power_a = [10**(db/10) for db in dB_a] 

編輯:其他的問題,如指出,評論,是值是字符串。 .csv文件本質上是一個文本文件,因此是字符串的集合,而不是整數。您可以使用int(db)float(db)將它們轉換爲數字值,具體取決於您是否具有整數或浮點數。

編輯2:正如@J指出的那樣。梅耶斯,我使用乘法而不是冪乘 - 這已經在答案中得到了解決。

+0

謝謝!這是有道理的,但是我仍然收到錯誤:「不支持的操作數類型(s)爲/:'str'和'int'」。 –

+0

我編輯了回覆,並設法對其進行測試。希望有所幫助。 –

+0

代碼中的哪些地方可以實現? –