从python中随机丢失数据的文本文件导入数据

时间:2018-02-28 10:11:08

标签: python numpy genfromtxt

我一直在努力尝试使用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

2 个答案:

答案 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.      ]]