Python:用不同的数字替换数组中的每个数字

时间:2015-12-04 15:57:54

标签: python arrays numpy replace

我的数据格式如下(在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

任何建议都会受到赞赏,欢呼。

2 个答案:

答案 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()