我的数据格式如下(在ASCII文件中):
363 28 24 94
536 28 24 95
我们有速度,时间,纬度,长度。 时间,纬度和长值都是真值的代码。例如,28的时间对应于2015-02-01,24的纬度对应于-67等的真实纬度。
有许多不同的编码值。时间范围为0-28,纬度为0-24,长度为0-108。
我希望将每个'code'值替换为真正的对应值并输出到文本文件中。 文本文件的格式为speed,true time,true lat,true long。
我尝试过使用字典并替换,但是替换似乎并不喜欢我在数组中读取的事实。
我还应该提一下,上面显示的原始格式的输入文件是79025行,每行我必须替换3个值。
这是我当前的尝试,它不能处理错误消息:AttributeError:'numpy.ndarray'对象没有属性'replace'
data=np.genfromtxt('./data/u_edit_2.coords')
time=data[:,[1]]
lat=data[:,[2]]
lon=data[:,[3]]
def replace_all(text, dic):
for i, j in dic.iteritems():
text = text.replace(i, j)
return text
reps = {'0':'2015-01-02', '1':'23773', '2':'23774'}
time_new = replace_all(time, reps)
print time_new
任何建议都会受到赞赏,欢呼。
答案 0 :(得分:3)
您的代码看起来像索引,因此您可以使用一些numpy索引技巧来获得结果:
# your values go here, where lat_values[24] = -67, etc.
time_values = np.array(['2015-01-01', '2015-01-02', ...])
lat_values = np.array([...])
lon_values = np.array([...])
# read the coded coords
_, time, lat, lon = np.loadtxt('coords', dtype=int).T
# decode
time = time_values[time]
lat = lat_values[lat]
lon = lon_values[lon]
答案 1 :(得分:-1)
这看起来更好地作为文件处理问题处理。然后,您可以处理该文件一次,并在需要时读入已处理的数据,而无需进行额外处理。
fmt = "{},{},{},{}\n" #or whatever format you want
def transform(line):
speed, time, lat, lon = line.strip().split()
return fmt.format(
speed,
true_time(time),
true_lat(lat),
true_lon(lon)
)
#change the next three functions to fit your needs
def true_time(time):
return time
def true_lat(lat):
return lat
def true_lon(lon):
return lon
fin = open("c:/temp/temp.txt","r")
fout = open("c:/temp/temp2.txt","w")
for line in fin:
if line.strip(): #ignore empty lines
fout.write(transform(line))
fin.close()
fout.close()