2017-10-07 110 views
1

我有一个8列的数据框,我想将最后六列转换为整数。数据框也包含NaN值,我不想删除它们。Python将特定的数据帧列转换为整数

enter image description here

 a  b c  d  e  f  g h 
0 john  1 NaN 2.0 2.0 42.0 3.0 NaN 
1 david 2 28.0 52.0 15.0 NaN 2.0 NaN 
2 kevin 3 1.0 NaN 1.0 10.0 1.0 5.0 

任何想法?

谢谢。

+0

你知道,如果已经存在于列中的浮动值可以在区间被限制?说[0,100]? –

+0

是的这很简单,很快你就有了答案:o –

回答

2

感谢MaxU我加入与南= -1此选项:

原因:NaN值是浮点值,不能与整数共存。 因此,要么男的价值观和浮筒或选择想-1作为南

http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.to_numeric.html

import pandas as pd 
import numpy as np 

df = pd.DataFrame.from_dict({'a': {0: 'john', 1: 'david', 2: 'kevin'}, 
'b': {0: 1, 1: 2, 2: 3}, 
'c': {0: np.nan, 1: 28.0, 2: 1.0}, 
'd': {0: 2.0, 1: 52.0, 2: np.nan}, 
'e': {0: 2.0, 1: 15.0, 2: 1.0}, 
'f': {0: 42.0, 1: np.nan, 2: 10.0}, 
'g': {0: 3.0, 1: 2.0, 2: 1.0}, 
'h': {0: np.nan, 1: np.nan, 2: 5.0}}) 

df.iloc[:, -6:] = df.iloc[:, -6:].fillna(-1) 
df.iloc[:, -6:] = df.iloc[:, -6:].apply(pd.to_numeric, downcast='integer') 

df 

    a b c d e f g h 
0 john 1 -1 2 2 42 3 -1 
1 david 2 28 52 15 -1 2 -1 
2 kevin 3 1 -1 1 10 1 5 
+0

谢谢!它的工作:) – Sheron

2

感谢@AntonvBR for the downcast='integer' hint

In [29]: df.iloc[:, -6:] = df.iloc[:, -6:].apply(pd.to_numeric, errors='coerce', downcast='integer') 

In [30]: df 
Out[30]: 
     a b  c  d e  f g h 
0 john 1 NaN 2.0 2 42.0 3 NaN 
1 david 2 28.0 52.0 15 NaN 2 NaN 
2 kevin 3 1.0 NaN 1 10.0 1 5.0 

In [31]: df.dtypes 
Out[31]: 
a  object 
b  int64 
c float64 
d float64 
e  int8 
f float64 
g  int8 
h float64 
dtype: object 
+1

嘿!在一些人打字之前,甚至不可能开始思考解决方案。但他想**整数。** downcast ='整数'? –

+0

是的,我需要integer..this转换为float :) @AntonvBR – Sheron

+0

@Giada,整数列不能有NaN,所以你需要用某个整数值替换NaN,或者用浮点数来代替... – MaxU