2012-05-14 5 views
26

Tôi chỉ mới bắt đầu với Pandas và tôi đang đọc trong tệp csv bằng cách sử dụng phương thức read_csv(). Khó khăn mà tôi đang gặp là ngăn chặn gấu trúc chuyển đổi số điện thoại của tôi thành số lớn, thay vì giữ chúng như những sợi dây. Tôi đã định nghĩa một công cụ chuyển đổi chỉ để lại các con số một mình, nhưng sau đó chúng vẫn được chuyển đổi thành các số. Khi tôi thay đổi công cụ chuyển đổi của mình để thêm một chữ 'z' vào các số điện thoại, thì chúng vẫn giữ nguyên chuỗi. Có cách nào để giữ cho chúng dây mà không sửa đổi các giá trị của các trường?Chỉ định kiểu dữ liệu trong Pandas csv reader

+2

Vui lòng hiển thị cho chúng tôi mã của bạn –

+3

@Gardner: bạn đã xem xét chấp nhận câu trả lời chưa? –

Trả lời

13

Có vẻ như bạn không thể tránh gấu trúc cố gắng chuyển đổi giá trị số/boolean trong tệp CSV. Hãy xem mã nguồn của gấu trúc cho trình phân tích cú pháp IO, trong các hàm cụ thể _convert_to_ndarrays_convert_types. https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py

Bạn luôn có thể gán kiểu bạn muốn sau bạn đã đọc các file:

df.phone = df.phone.astype(str) 
+1

Cảm ơn @ lbolla, điều này đã giúp một trong các bugfix của tôi, trong đó một giá trị float được đọc dưới dạng chuỗi từ một cột khác là chuỗi và sau đó gây ra các vấn đề trong các hàm tổng hợp. Tôi đã phải làm df ['col'] = df ['col']. Astype (float64) –

28

Kể từ Pandas 0.11.0 bạn có thể sử dụng dtype lập luận để xác định một cách rõ ràng kiểu dữ liệu cho mỗi cột:

d = pandas.read_csv('foo.csv', dtype={'BAR': 'S10'}) 
+1

Lưu ý rằng điều này không có sẵn (tuy nhiên, hy vọng) đối với một số chức năng đầu vào khác, như 'pandas.read_fwf()' – ReneSac

+2

I xem lại chủ đề và hỗ trợ cho 'dtype' đã được thêm vào' pandas.read_fwf' :) – zero323

+0

Phương thức này không hoạt động đối với các tập dữ liệu lớn là có cách nào khác để đọc một csv và chỉ các cột cụ thể. –