Tôi có một số tập tin văn bản với định dạng sau:Cách chỉ định dtype khi sử dụng pandas.read_csv để tải dữ liệu từ tệp csv?
000423|东阿阿胶| 300|1|0.15000| |
000425|徐工机械| 600|1|0.15000| |
000503|海虹控股| 400|1|0.15000| |
000522|白云山A| |2| | 1982.080|
000527|美的电器| 900|1|0.15000| |
000528|柳 工| 300|1|0.15000| |
khi tôi sử dụng read_csv để tải chúng vào DataFrame, nó không tạo ra dtype chính xác cho một số cột. Ví dụ, cột đầu tiên được phân tách thành int, không phải là unicode str, cột thứ ba được phân tích cú pháp là unicode str, chứ không phải int, vì một dữ liệu bị thiếu ... Có cách nào để đặt trước dtype của DataFrame, giống như numpy.genfromtxt làm gì?
Cập nhật: tôi đã sử dụng read_csv
như thế này mà gây ra vấn đề:
data = pandas.read_csv(StringIO(etf_info), sep='|', skiprows=14, index_col=0,
skip_footer=1, names=['ticker', 'name', 'vol', 'sign',
'ratio', 'cash', 'price'], encoding='gbk')
Để giải quyết cả dtype và mã hóa vấn đề, tôi cần phải sử dụng unicode()
và numpy.genfromtxt
đầu tiên:
etf_info = unicode(urllib2.urlopen(etf_url).read(), 'gbk')
nd_data = np.genfromtxt(StringIO(etf_info), delimiter='|',
skiprows=14, skip_footer=1, dtype=ETF_DTYPE)
data = pandas.DataFrame(nd_data, index=nd_data['ticker'],
columns=['name', 'vol', 'sign',
'ratio', 'cash', 'price'])
Sẽ rất tuyệt nếu read_csv
có thể thêm các cài đặt dtype
và usecols
. Xin lỗi vì sự tham lam của tôi.^_^
Thật vậy, một số công việc khác là cần thiết đối với người đọc tệp. Xem tại đây: https://github.com/pydata/pandas/issues/926. Hy vọng rằng một nhà phát triển huyền diệu sẽ ra khỏi đồ gỗ và giúp tôi với điều này. –