簡體   English   中英

在csv中編寫多個numpy數組以及字符串

[英]Write multiple numpy arrays along with strings in csv

似乎只是一件簡單的事情,但我失敗了。 我想將以下數組與其他字符串(即"\\n" )一起寫入csv文件的一行中。 值應以分號分隔。

我從列表創建數組

auth_list = ['5,2.6,5.23515389636e-11,0.00444005161574,0.0644299145707,0.04,0.0037037037037', '1,5.0,5.65187364062e-12,0.0,0.0605326876513,0.0,0.000740740740741']
aff_list = [(1, 0.003105590062111801), (1, 0.001838235294117647)]
comm_list = ['', '4,17.5,0.00584085856718,0.0002890919969,0.278790504782,0.0140752484561,0.0029973357016,0.00044404973357', '0,0.0,0.000218693005322,3.33471210416e-07,0.232075228649,0.0,0.000222024866785,0.0', '0,0.0,0.00025235732634,6.73003774237e-07,0.233652374653,0.0428571428571,0.000555062166963,0.0']

我繼續將它們變成數組

import numpy
auth_array = numpy.genfromtxt(auth_list, delimiter=",")
aff_array = numpy.array(aff_list) # Here I don't have to use numpy.genfromtext, don't know why
auth_array = numpy.genfromtxt(aff_list, delimiter=",")

這些數組已經沒有逗號了。 我使用計算平均值

auth_mean = numpy.mean(auth_array, axis=0)
aff_mean = numpy.mean(aff_array, axis=0)
comm_mean = numpy.mean(comm_array, axis=0)
title = "Happy New Year"

使用print ,我在終端中看到

auth_mean = [  3.00000000e+00   3.80000000e+00   2.90017063e-11   2.22002581e-03
          6.24813011e-02   2.00000000e-02   2.22222222e-03]
aff_mean = [ 1.          0.00247191]
comm_mean = [  1.33333333e+00   5.83333333e+00   2.10396963e-03   9.66994906e-05
          2.48172703e-01   1.89774638e-02   1.25814091e-03   1.48016578e-04]

數組始終具有相同的尺寸。

output_text = title + str(auth_mean).strip('[]') + ";" + str(com_mean).strip('[]') + ";" + str(aff_mean).strip('[]') + "\n"
output_file = open(output_file_name, 'w')
output_file.write(output_text)
output_file.close()

產量

  Happy New Year;3.00000000e+00   3.80000000e+00   2.90017063e-11   2.22002581e-03
  6.24813011e-02   2.00000000e-02   2.22222222e-03;  1.33333333e+00   5.83333333e+00   2.10396963e-03   9.66994906e-05
  2.48172703e-01   1.89774638e-02   1.25814091e-03   1.48016578e-04; 1.          0.00247191

我怎樣才能像一條簡單的直線

Happy New Year;3.00000000e+00;3.80000000e+00;2.90017063e-11;2.22002581e-03;6.24813011e-02;2.00000000e-02;2.22222222e-03;1.33333333e+00;5.83333333e+00;2.10396963e-03;9.66994906e-05;2.48172703e-01;1.89774638e-02;1.25814091e-03;1.48016578e-04;1.;0.00247191

我添加了逗號來分隔三個列表的元素(如上面的MERose所查詢),並且我還必須初始化output_file_name: output_file_name = "output.csv"

我希望這不是一個愚蠢的問題,但是有可能在打開“自動換行”的文本編輯器中檢查輸出的文件嗎? 我運行了代碼,並根據需要獲得了一行輸出。 如果隨后在打開“自動換行”的情況下在Notepad ++中查看文件,則實際上它只是一行而已卻顯示為多行。

僅供參考:輸出的文件也很好地導入了LibreOffice Calc。

首先,您忘記了代碼中的逗號,我認為是:

title = "Happy New Year"
auth = [  3.00000000e+00,   3.80000000e+00,   2.90017063e-11,   2.22002581e-03,
          6.24813011e-02,   2.00000000e-02,   2.22222222e-03]
aff = [ 1.  ,        0.00247191]
comm = [  1.33333333e+00,   5.83333333e+00,   2.10396963e-03,   9.66994906e-05,
          2.48172703e-01,   1.89774638e-02,   1.25814091e-03,   1.48016578e-04]

現在解決問題:您可以使用itertools鏈將許多數組合並為一個:

from itertools import chain

out = chain([title], auth, aff, comm, ['\n'])

然后,您可以使用分號加入此行:

str_row = ';'.join(map(str, out))
print(str_row)  #or write to file, if you need

但是,我強烈建議您不要重新發明輪子,而是使用標准的csv模塊來編寫任何csv文件。 您可以指定';' 設置csv writer時用作分隔符。

暫無
暫無

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

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