2017-10-07 8 views
1

私は8列のデータフレームを持ち、最後の6列を整数に変換したいと思います。データフレームには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

ありがとう:

理由:NaN値は浮動小数点値であり、整数と共存することはできません。 列内に既に存在する浮動値が区間内に制限することができますのであれば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:私はナン= -1でこのオプションを追加しているMaxUへ

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

関連する問題