我一直在努力尝试使用numpy.genfromtxt()将数据从文本文件导入到数组中。
我遇到的问题是这些数据文件应该有五列,但有时候一行上缺少数据条目,而且我只有4列或更少的列。
我已经阅读了genfromtxt()的numpy文档并最终找到了注释"当空格用作分隔符时,或者没有给定分隔符作为输入时,不应该有任何丢失的数据在两个领域之间"。不幸的是,这与我所处的情况非常相似。
有人可以建议或向我展示我可以用来处理这类数据的其他功能/模块吗?
由于
使用我尝试过的示例进行更新:
data = np.genfromtxt(matches[0], skip_header = 6, usecols = (0,1,2,3,4), dtype=['S15','f8','f8','f8','i8'])
我得到的错误是:
ValueError: Some errors were detected !
Line #7 (got 4 columns instead of 5)
Line #17 (got 4 columns instead of 5)
Line #27 (got 4 columns instead of 5)
Line #78 (got 4 columns instead of 5)
当我看到数据文件时,所述线上的第四个数据点缺失(因此它只能看到4列)。我已经查看了我必须以这种方式导入的许多数据文件,它随机发生,第四列中的数据有时会丢失。
为了完整起见,这里是数据文件的摘录:
Start voltage = 0.000000V
Final voltage = 30.000000V
Voltage step = 5.000000V
Acquisition time = 10s
Post Irradiation 1
20180214_162747 -6.07967e-07 7.24649e-10 00000000000
20180214_162748 -3.69549e-07 6.10220e-10 +0.52310E-10 00000009504
20180214_162749 -6.19888e-07 5.97525e-10 +0.61081E-10 00000009239
20180214_162750 -1.27554e-06 6.65617e-10 +0.63719E-10 00000009053
20180214_162751 4.42266e-06 6.88171e-10 +0.70692E-10 00000009188
20180214_162752 1.99080e-06 6.10995e-10 +0.67934E-10 00000009321
20180214_162753 5.60284e-07 7.29239e-10 +0.71260E-10 00000009007
20180214_162754 1.04904e-06 6.29222e-10 +0.72195E-10 00000009386
20180214_162755 -1.84774e-06 6.12736e-10 +0.67136E-10 00000009403
20180214_162756 -4.76837e-08 6.86717e-10 +0.62982E-10 00000009379
20180214_162757 2.80142e-06 6.87110e-10 00000009417
20180214_162758 5.00005e+00 1.70809e-08 +1.61506E-09 00000006002
20180214_162759 5.00004e+00 1.07430e-08 +1.67208E-09 00000011408
20180214_162800 5.00003e+00 9.07902e-09 +1.75613E-09 00000011277
20180214_162801 5.00002e+00 8.52853e-09 +1.80156E-09 00000011702
20180214_162802 5.00002e+00 8.42900e-09 +1.86753E-09 00000011736
答案 0 :(得分:0)
我遇到了同样的问题,使用CSV库
解决了这个问题# Call CSV library
import csv
# Select your text file
text_file = open("C:\DataSet\your-file.txt", "r")
# Read each line of text file and save it in lines.
lines = text_file.readlines()
# Print lines and you are good to go
print(lines)
text_file.close()
# In case you want to export it as csv file.
mycsv = csv.writer(open('C:\DataSet\OutPut.csv', 'wb'))
# Write header for csv file.
mycsv.writerow(['h1','h2', .... ,'hn'])
答案 1 :(得分:0)
如评论中所示,您可以使用pandas csv_reader
,其中包含不同的关键字
arr = pd.read_csv("test.txt", delim_whitespace = True, header = None).fillna(0).values
print(arr)
根据您添加的代码,我假设您要跳过行,因此您可能希望使用
arr = pd.read_csv("test.txt", delim_whitespace = True, skiprows = 2).fillna(0).values
#Sample input:
#unused row
#another unused row
#i j k l
#0 38.52200 5.600 129.203995
#1 23.85499
#2 4.41700 40.182 121.309998
#3 65.76199 27.550
#Sample output:
#[[ 0. 38.522 5.6 129.203995]
# [ 1. 23.85499 0. 0. ]
# [ 2. 4.417 40.182 121.309998]
# [ 3. 65.76199 27.55 0. ]]