所以,我正在尝试读取一个奇怪的.csv文件,这些文件有逗号分隔值,但由于每对列代表不同的数据类型,因此用两个逗号“,,”分隔。最重要的是,在某一行之后的某些特定列中缺少值(参见下面的最小示例)
ROW1:
-2.418809,0.004107006,359.896,1.86897E-07,359.896,2.958411 ,, - 2.419437,0.1012164,359.9048,2.095844E-06,359.9048,-2.049214
ROW2
-2.41644,0.004659269 ,,,,,,,, - 2.417068,0.1013545 ,,,,,,
我尝试使用answer here中描述的方法解决问题,但没有成功,因为loadtxt无法处理缺失的值 目前我正在尝试用numpy.loadtxt读取它,只指定直到最后的列:
import numpy as np
data = np.loadtxt(name,
delimiter=',',
unpack=True,
usecols=(0,1,6,7))
但我收到了一个错误:
ValueError: could not convert string to float
有没有人知道是否有一种简单的方法可以解决这个问题?
答案 0 :(得分:0)
你已经打破了csv的基本原则 https://en.wikipedia.org/wiki/Comma-separated_values
复杂CSV解决方案:
答案 1 :(得分:0)
第一步是,如果你说csv使用两个逗号而不是一个逗号,你应该将delimiter=',,'
传递给np.loadtxt
。
其次,如果您需要自定义每列的解析,正如Aaron在评论中所说,您可以通过converters
来自定义数据的存储方式。例如,如果您希望列2在找到并为空字符串时给出零,则执行
import numpy as np
data = np.loadtxt(name,
delimiter=',,',
converters = {2: lambda x: 0 if x == "" else float(x)}
unpack=True,
usecols=(0,1,6,7))
我没有测试代码,但是我直接从documentation检查了一下,想想你怎么能这样做。如果该代码不起作用,那么无论如何都应该是这样的。
希望它有所帮助。
答案 2 :(得分:0)
最后我发现了一种非优雅但又有效的方法:我使用了genfromtxt来更好地处理丢失的数据,默认情况下将它们视为NaN。使用逗号','作为分隔符,函数读取双逗号',,'作为逗号缺失值-逗号,所以在任何地方都有双逗号,函数的输出是NaN。完成后我刚刚删除了应用this answer here
的纳米列import numpy as np
data = np.genfromtxt(namefile,
delimiter=',')
datanew = data[:, ~np.all(np.isnan(data), axis=0)]
data = np.transpose(datanew)