numpy.genfromtxt возвращает значения NaN - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь построить второй столбец csv-файла, но второй столбец возвращает значения nan.Если я установлю dtype = None или dtype = str, вернутся строковые значения, которые в конце приводят к неправильному построению по оси Y.Любой комментарий будет оценен.

второй столбец в CSV включает значения от 80-99%, которые сохраняются, как этот фрагмент

 numpy.savetxt('loss_acc_exp4.csv', numpy.c_[losses, ACCes], fmt=['%.4f', '%d %%'], header= "loss, acc", comments='', delimiter = ",")                    

Вот фрагмент для сюжета CSVфайл

import numpy
import matplotlib.pyplot as plt
acc_history = numpy.genfromtxt("loss_acc_exp4.csv", delimiter=",", 
skip_header=1, usecols=(1))


num_epochs = 151
epochs = range(1, num_epochs)

plt.figure(figsize=(10,6))
plt.plot(epochs, acc_history[::2], '-b', label='Training accuracy') #plot odd rows
plt.plot(epochs, acc_history[1::2], '-r', label='Validation accuracy') # plot even rows
plt.legend()
plt.xlabel('Epoch')
plt.ylabel('accuracy')
plt.xlim(0.01,151)
plt.show()

Данные в CSV выглядят так:

enter image description here

import pandas as pd


def convert_percent(val):
"""
Convert the percentage string to an actual floating point percent
- Remove %
- Divide by 100 to make decimal
"""
new_val = val.replace('%', '')
new_val = pd.Series([new_val]).astype(float)
return (new_val) / 100

acc_history = pd.read_csv("loss_acc_exp4.csv", delimiter=",", header=0, 
usecols=[1], dtype=None)
acc_history[:].apply(convert_percent)

возвращается ValueError: ('setting an array element with a sequence.', 'occurred at index acc')

1 Ответ

0 голосов
/ 29 января 2019

Использование конвертера:

def foo(astr):
    return float(astr[:-1])
In [296]: np.genfromtxt('test.csv', delimiter=',', converters={1:foo})
Out[296]: 
array([[ 0.8469, 99.    ],
       [ 0.3569, 98.    ],
       [ 0.9622, 97.    ],
       [ 0.4774, 96.    ],
       [ 0.381 , 95.    ]])
...