2017-10-01 6 views
0

パンダとナンディの世界全体にはとても新しいものです。私はPythonの経験がありますが、この面ではありません。私はデータセットで作業しようとしていましたが、私は説明できないという問題を発見しました。経験豊富な人が何が間違っているのか理解するのに役立ちます。パンダのデータフレームに機能が正しく適用されていません

私は3つのフィールドを持つCSVファイルを持っています。 「年齢」、「労働者階級」、および「所得」。ヘッダはので、私は次のようにCSVを読み込ま欠落していた - 「< = 50K」または「> 50K」 -

import numpy as np 
import pandas as pd 

df = pd.read_csv("test.csv", index_col=False, header=None, names=["age", "workclass", "income"]) 

さて最後の列のデータは、この形式です。私は上記の値に基づいてデータを "0"または "1"に変換したいと思っていました。 "< = 50K"の場合は0、 "> 50K"の場合は1です。達成するために私はこのコード行を書いた

def test_func(x): 
    if x == "<=50K": 
     return "0" 
    else: 
     return "1" 

df['income'] = df['income'].apply(test_func) 

これはすべての列を "1"にする!私はtest_funcの中にいくつかの印刷を行い、xが適切な値を持ち、xの型が "str"であるように見えます。私は理解できません。この場合、いつも「else」部分が実行され、「if」部分は決して実行されません。私は間違って何をしていますか?

私が間違っていると間違っていることがあります。私は確信していませんし、どんな助けも素晴らしいでしょう。

ありがとうございます。

答えて

3

オプション1
astype

df['income'] = df['income'].eq("<=50K").astype(int) 

オプション2
np.where

df['income'] = np.where(df.income == "<=50K", 1, 0) 
+0

フィールド値にスペースがあることがわかったため、2番目の方法を使用しました。そのため、元の適用比較も失敗したのです。最初の方法で文字列を取り除く方法が見つかりませんでした。しかし、df ['income'] = np.where(df.income.str.strip()== "<= 50K"、1,0)の場合、完全に動作します。皆さん、お返事ありがとうございます。それは私にパンダの良い教訓を与えました。 – SRC

2

私はどうなる:

df.loc[df['income']=='<=50K','income'] = 0 
df.loc[df['income']!='<=50K','income'] = 1 
2

アレックスのソリューションは、古典的ですが、内蔵のnp.whereと呼ばれるnumpyの中に、この関数/場合があります。私はそれで超慣れていないんだけど、それが何かのように見えるでしょう...

df['income'] = np.where((df['income']=='<=50K','income'), 1 ,0) 

Referenced np.where Stackoverflow Question

+0

あなたは 'np.where'を間違って使用しています。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅはどのように使用するのかは分かりませんでしたが、仕事のための機能だと感じました!正しい使用を提供してくれてありがとう。 –

関連する問題