Fab*_*ian 11 python numpy pandas
因为
请注意,并非原始csv文件中的所有列都具有浮点类型.我只需要将float32设置为float列的默认值.
Ale*_*der 11
尝试:
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)
Run Code Online (Sandbox Code Playgroud)
这首先读取100行数据的样本(根据需要进行修改)以确定每列的类型.
它创建了一个列为'float64'的列,然后使用字典理解来创建一个字典,其中这些列作为键,'np.float32'作为每个键的值.
最后,它使用'c'引擎(将dtypes分配给列所需)读取整个文件,然后将float32_cols字典作为参数传递给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)
Run Code Online (Sandbox Code Playgroud)
这是一个不依赖.join或不需要读取文件两次的解决方案:
float64_cols = df.select_dtypes(include='float64').columns
mapper = {col_name: np.float32 for col_name in float64_cols}
df = df.astype(mapper)
Run Code Online (Sandbox Code Playgroud)
或者作为一句俏皮话:
df = df.astype({c: np.float32 for c in df.select_dtypes(include='float64').columns})
Run Code Online (Sandbox Code Playgroud)