我导入了一个具有不同类型列的DataFrame。见下文:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1272 entries, 0 to 1271
Columns: 189 entries, Year to HUMAN_rank
dtypes: float64(67), int64(1), object(121)
memory usage: 1.8+ MB
我想提出一个函数,该函数遍历DataFrame的每一列,标识每一列中的值的类型,如果该列具有类型对象,则将其转换为float。
答案 0 :(得分:1)
要仅对object
个dtypes执行此操作,可以使用select_dtypes
进行此操作:
df[df.select_dtypes('object').columns] = df.select_dtypes('object').astype(float)
例如:
>>> df
col1 col2 col3 col4
0 1 0.452893 2 8
1 2 0.745232 3 6
2 1 0.374296 3 1
3 3 0.398660 3 4
4 2 0.902737 2 1
5 3 0.940392 3 0
6 3 0.382493 3 0
7 2 0.684829 3 4
8 2 0.506248 3 8
9 1 0.161701 3 3
>>> df.dtypes
col1 object
col2 float64
col3 object
col4 int64
dtype: object
>>> df[df.select_dtypes('object').columns] = df.select_dtypes('object').astype(float)
>>> df.dtypes
col1 float64
col2 float64
col3 float64
col4 int64
dtype: object
注意:如果您的某些列中的某些值无法转换为float,则上述方法将不起作用。您可以遍历它们,使用pd.to_numeric
和errors='coerce'
和downcast='float'
来转换它们:
>>> df
col1 col2 col3 col4
0 3 0.594651 2 6
1 3 0.677595 3 3
2 3 0.546434 1 0
3 3 0.454769 2 6
4 x 0.321130 2 3
5 2 0.473391 2 7
6 1 0.207182 2 7
7 2 0.883071 3 1
8 x 0.994372 2 4
9 1 0.052539 3 2
>>> df.dtypes
col1 object
col2 float64
col3 object
col4 int64
dtype: object
for col in df.select_dtypes('object').columns:
df[col] = pd.to_numeric(df[col], errors='coerce', downcast='float')
>>> df
col1 col2 col3 col4
0 3.0 0.594651 2.0 6
1 3.0 0.677595 3.0 3
2 3.0 0.546434 1.0 0
3 3.0 0.454769 2.0 6
4 NaN 0.321130 2.0 3
5 2.0 0.473391 2.0 7
6 1.0 0.207182 2.0 7
7 2.0 0.883071 3.0 1
8 NaN 0.994372 2.0 4
9 1.0 0.052539 3.0 2
>>> df.dtypes
col1 float32
col2 float64
col3 float32
col4 int64
dtype: object