2015-05-27 30 views
9

Làm thế nào để buộc gấu trúc read_csv sử dụng float32 cho tất cả các cột phao?

  • tôi không cần độ chính xác kép
  • máy của tôi đã giới hạn bộ nhớ và tôi muốn để xử lý các tập dữ liệu lớn hơn
  • tôi cần phải vượt qua các dữ liệu được chiết xuất (dạng ma trận) để thư viện BLAS, và Các cuộc gọi BLAS cho độ chính xác đơn là 2x nhanh hơn so với độ chính xác kép tương đương.

Lưu ý rằng không phải tất cả các cột trong tệp csv thô đều có loại phao. Tôi chỉ cần đặt float32 làm mặc định cho các cột phao.

Trả lời

8

Hãy thử:

import numpy as np 
import pandas as pd 

# Sample 100 rows of data to determine dtypes. 
df_test = pd.read_csv(filename, nrows=100) 

float_cols = [c for c in df_test if df_test[c].dtype == "float64"] 
float32_cols = {c: np.float32 for c in float_cols} 

df = pd.read_csv(filename, engine='c', dtype=float32_cols) 

này đầu tiên đọc một mẫu của 100 dòng dữ liệu (sửa đổi theo yêu cầu) để xác định loại của mỗi cột.

Nó tạo danh sách các cột đó là 'float64' và sau đó sử dụng tính năng đọc từ điển để tạo từ điển có các cột này làm khóa và 'np.float32' làm giá trị cho mỗi khóa.

Cuối cùng, nó đọc toàn bộ tệp bằng công cụ 'c' (bắt buộc phải gán dtypes cho cột) và sau đó chuyển từ điển float32_cols làm tham số đến dtype.

df = pd.read_csv(filename, nrows=100) 
>>> df 
    int_col float1 string_col float2 
0  1  1.2   a  2.2 
1  2  1.3   b  3.3 
2  3  1.4   c  4.4 

>>> df.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 3 entries, 0 to 2 
Data columns (total 4 columns): 
int_col  3 non-null int64 
float1  3 non-null float64 
string_col 3 non-null object 
float2  3 non-null float64 
dtypes: float64(2), int64(1), object(1) 

df32 = pd.read_csv(filename, engine='c', dtype={c: np.float32 for c in float_cols}) 
>>> df32.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 3 entries, 0 to 2 
Data columns (total 4 columns): 
int_col  3 non-null int64 
float1  3 non-null float32 
string_col 3 non-null object 
float2  3 non-null float32 
dtypes: float32(2), int64(1), object(1) 
Các vấn đề liên quan