2012-03-30 27 views
9

Có một số bài đăng gần như trả lời câu hỏi này nhưng tôi không hiểu họ hoặc họ không trả lời câu hỏi:Làm thế nào để thay đổi kiểu chữ của một cuộc trò chuyện lộn xộn?

Tôi có một bài viết được thực hiện bằng cách sử dụng numpy.rec.fromrecords. Nói rằng tôi muốn chuyển đổi các cột nhất định thành phao. Làm thế nào để tôi làm điều này? Tôi có nên thay đổi thành ndarray và họ quay trở lại một cuộc tái đấu?

Trả lời

14

Dưới đây là một ví dụ sử dụng astype để thực hiện việc chuyển đổi:

import numpy as np 
recs = [('Bill', '31', 260.0), ('Fred', 15, '145.0')] 
r = np.rec.fromrecords(recs, formats = 'S30,i2,f4', names = 'name, age, weight') 
print(r) 
# [('Bill', 31, 260.0) ('Fred', 15, 145.0)] 

Các age là dtype <i2:

print(r.dtype) 
# [('name', '|S30'), ('age', '<i2'), ('weight', '<f4')] 

Chúng ta có thể thay đổi điều đó để <f4 sử dụng astype:

r = r.astype([('name', '|S30'), ('age', '<f4'), ('weight', '<f4')]) 
print(r) 
# [('Bill', 31.0, 260.0) ('Fred', 15.0, 145.0)] 
+0

Cảm ơn! Các "astype" là hơi nhỏ gọn hơn tái tạo một mảng mới ... Tôi giả định nó số tiền cho cùng một điều về hiệu quả. Tôi cũng đăng giải pháp của mình dưới đây vì nó bao gồm cách sửa đổi một loại dtype hiện có. – mathtick

11

Có một về cơ bản hai bước. Chướng ngại vật của tôi là tìm cách sửa đổi một loại dtype hiện có. Đây là cách tôi đã làm điều đó:

# change dtype by making a whole new array 
dt = data.dtype 
dt = dt.descr # this is now a modifiable list, can't modify numpy.dtype 
# change the type of the first col: 
dt[0] = (dt[0][0], 'float64') 
dt = numpy.dtype(dt) 
# data = numpy.array(data, dtype=dt) # option 1 
data = data.astype(dt) 
Các vấn đề liên quan