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)