2015-05-27 10 views
9

क्योंकिसभी फ्लोट कॉलम के लिए float32 का उपयोग करने के लिए pandas read_csv को कैसे बल दें?

  • मैं डबल परिशुद्धता की जरूरत नहीं है
  • मेरे मशीन स्मृति सीमित है और मैं बड़ा डेटासेट कार्रवाई करने के लिए चाहते हैं
  • मैं BLAS पुस्तकालयों के लिए निकाले गए डेटा पारित करने के लिए (मैट्रिक्स के रूप में) की जरूरत है, और डबल परिशुद्धता समकक्ष के लिए एकल सटीकता के लिए बीएलएएस कॉल 2x तेज है।

ध्यान दें कि कच्चे सीएसवी फ़ाइल में सभी कॉलमों में फ्लोट प्रकार नहीं हैं। मुझे केवल फ्लोट कॉलम के लिए फ्लोट 32 को डिफ़ॉल्ट रूप से सेट करने की आवश्यकता है।

उत्तर

8

प्रयास करें:

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) 

यह पहला प्रत्येक स्तंभ के प्रकार का निर्धारण करने के लिए डेटा की 100 पंक्तियों का नमूना पढ़ता है (के रूप में आवश्यक बदलाव करें)।

यह उन कॉलमों की एक सूची बनाता है जो 'float64' हैं, और फिर इन कॉलम के साथ कुंजीपटल और 'np.float32' के रूप में प्रत्येक कुंजी के मान के रूप में शब्दकोश बनाने के लिए शब्दकोश समझ का उपयोग करता है।

अंत में, यह 'सी' इंजन (स्तंभों के लिए dtypes असाइन करने के लिए आवश्यक) का उपयोग कर पूरी फ़ाइल पढ़ता है और फिर flat32_cols शब्दकोश को टाइप करने के लिए पैरामीटर के रूप में पास करता है।

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) 
संबंधित मुद्दे

 संबंधित मुद्दे