我正在尝试读取如下所示的简单CSV文件,并将其内容放入2D数组中:
"","x","y","sim1","sim2","sim3","sim4","sim5","sim6","sim7","sim8","sim9","sim10","sim11","sim12"
"1",181180,333740,5.56588745117188,6.29487752914429,7.4835410118103,5.75873327255249,6.62183284759521,5.81478500366211,4.85671949386597,5.90418815612793,6.32611751556396,6.99649047851562,6.52076387405396,5.68944215774536
"2",181140,333700,6.36264753341675,6.5217604637146,6.16843748092651,5.55328798294067,7.00429201126099,6.43625402450562,6.17744159698486,6.72836923599243,6.38574266433716,6.81451606750488,6.68060827255249,6.14339065551758
"3",181180,333700,6.16541910171509,6.44704437255859,7.51744651794434,5.46270132064819,6.8890323638916,6.46842670440674,6.07698059082031,6.2140531539917,6.43774271011353,6.21923875808716,6.43355655670166,5.90692138671875
为此,我使用以下代码:
data = np.loadtxt("Data/sim.csv", delimiter=',', skiprows=1)
但是我总是收到以下消息:
"ValueError: could not convert string to float: "1"
我认为问题出在每一行的第一列。因此,我尝试在没有第一列的情况下阅读它,但是我找不到如何做的内容。
因此,我如何忽略第一列?有没有办法用第一列读取此文件?
您可以为任何列指定一个转换器。
converters = {0: lambda s: float(s.strip('"')}
data = np.loadtxt("Data/sim.csv", delimiter=',', skiprows=1, converters=converters)
或者,您可以指定要使用的列,例如:
data = np.loadtxt("Data/sim.csv", delimiter=',', skiprows=1, usecols=range(1,15))
http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html
在不知道列数的情况下,跳过第一列的一种方法是手动从csv中读取列数。这很容易,尽管您有时可能需要进行调整以解决格式不一致问题*。
with open("Data/sim.csv") as f:
ncols = len(f.readline().split(','))
data = np.loadtxt("Data/sim.csv", delimiter=',', skiprows=1, usecols=range(1,ncols+1))
*如果顶部有空白行,则需要跳过它们。如果字段标题中可能包含逗号,则应使用第一条数据行来计数列。因此,如果您有特定的问题,我可以添加一些细节以使代码更加健壮。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句