Python numpy.genfromtxt返回NaN值

Python numpy.genfromtxt返回NaN值,python,numpy,matplotlib,genfromtxt,Python,Numpy,Matplotlib,Genfromtxt,我试图绘制csv文件的第二列,但第二列返回nan值。如果我设置dtype=None或dtype=str,将返回字符串值,该字符串值位于最终原因处,以错误的方式在Y轴上打印。如有任何评论,将不胜感激 csv中的第二列包含80-99%的值,这些值以前会像下面的代码段一样保存 下面是打印csv文件的代码段 import numpy import matplotlib.pyplot as plt acc_history = numpy.genfromtxt("loss_acc_exp4.csv", de

我试图绘制csv文件的第二列,但第二列返回nan值。如果我设置dtype=None或dtype=str,将返回字符串值,该字符串值位于最终原因处,以错误的方式在Y轴上打印。如有任何评论,将不胜感激

csv中的第二列包含80-99%的值,这些值以前会像下面的代码段一样保存

下面是打印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中的数据如下所示

它使用转换器返回
ValueError:(“使用序列设置数组元素”,“在索引acc处发生”)

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.    ]])

您可以分享您的
丢失\u acc\u exp4.csv
文件的外观吗?这是了解格式所必需的。默认数据类型为float。不合适的字符串将作为nan返回。@newkid抱歉。我的问题是关于acc col.@Neda你能给你的问题加一个剪贴吗?从您的注释中不清楚文件的格式(换行符、分隔符、精度等),是“%”字符阻止了
genfromtxt
将字符串转换为数字。尝试
float('91%”)
。您可以加载
dtype=None
,然后自己转换这些字符串。或者编写一个转换器来删除“%”并返回一个浮点,例如
浮点(astr[:-1])
。或者更改
savetxt
以省略不必要的“%”。
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)
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.    ]])