簡體   English   中英

在CSV文件中編寫和讀取浮點數和字符串-python

[英]Writing and reading floats and strings in a CSV file - python

我對python和編程有點陌生。 在我的代碼中,我為每個音頻文件開發了一個功能(由39個元素組成的1-D數組)。 我想將文件名,功能及其目標值{0,1}寫入CSV文件中,以訓練我的SVM分類器。 我使用了CSV編寫器,如下所示。

with open('train.csv', 'a') as csvfile:
    albumwriter = csv.writer(csvfile, delimiter=' ')
    albumwriter.writerow(['1.03 I Want To Hold Your Hand'] + Final_feature + [0] )

我想將大約180個音頻文件的詳細信息寫入此CSV文件,並將其提供給SVM分類器。 我用來讀取文件的代碼是:

with open('train.csv', 'rb') as csvfile:
    albumreader = csv.reader(csvfile, delimiter=' ')
    data = list()
    for row in albumreader:
        data.append(row[0:]) 
data = np.array(data)

我可以在第一行中以data[0][1]訪問文件名,並以data[0][2]但是它們都在<type 'numpy.string_'> 我想將功能轉換為浮點數列表。 主要問題似乎是用','分隔列表中的元素。 我嘗試使用.astype(np.float)但徒勞。

誰能建議我一個將字符串從CSV文件轉換回浮點數的好方法? 非常感謝您的幫助,因為我很少有時間來完成此項目。 提前致謝。

編輯:根據評論,這就是我的train.csv的樣子:

"1.01 I saw her standing there" "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38]" 0

"1.02 I saw her" "[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]" 0

"1.03 I want to hold your hand" "[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]" 1

我並沒有確切地想要實現,但是假設Final_feature是一個浮點數的python列表,並根據用於編寫csv文件的代碼段,您可以將該列表作為一個字符串來獲取,該字符串可能看起來像這樣:(輸入數據[0] [2])

feature = '[3.14, 2.12, 4.5]' # 3 elements only for clarity

您詢問如何將此字符串轉換為float,可以使用:

map(float, feature[1:-1].split(','))

作為參考,map將其第一個參數應用於其第二個參數的每個元素,從而轉換浮點數中的每個字符串並返回一個浮點數列表。

另一個解決方案是將Final_feature的每個元素寫在單獨的列中。

要將“ [1.0,2.0,3.0]”之類的字符串轉換為列表[1.0,2.0,3.0]:

# string to convert
s = '[1.0, 2.0, 3.0]'

lst = [float(x) for x in s[1: -1].split(',')]

# and result will be
[1.0, 2.0, 3.0]

這適用於標准python字符串類型和numpy.string類型。

從我可以看到,變量Final_feature是一個浮點數列表? 在這種情況下,根據您編寫文件的方式,以下內容將導入數據

with open('train.csv', 'rb') as csvfile:
    albumreader = csv.reader(csvfile, delimiter=' ')

    audio_file_names = []
    final_features = []
    target_values = []
    for row in albumreader:
        audio_file_names.append(row[0])
        final_features.append([float(s) for s in row[1:-1]])
        target_values.append([int(s) for s in row[-1]])

有兩種列表推導可將數據轉換為浮點數和整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM