過去30分間の回答を検索しましたが、唯一の解決策は単一の列またはRのいずれかです。( 'Y/N')値を1と0に変更するデータセットがありますそれぞれ。コードを17回以下にコピーして貼り付けるのは非常に非効率的だと思います。
df.loc[df.infants == 'n', 'infants'] = 0
df.loc[df.infants == 'y', 'infants'] = 1
df.loc[df.infants == '?', 'infants'] = 1
私の解決策は次のとおりです。これによりエラーは発生しませんが、データフレームの値は変わりません。私はdf = df_newのような何かをする必要があると仮定しています。しかし、これを行う方法は?
for coln in df:
for value in coln:
if value == 'y':
value = '1'
Elif value == 'n':
value = '0'
else:
value = '1'
編集:このデータセットには17列ありますが、56列を含む別のデータセットに取り組みたいと思っています。
republican n y n.1 y.1 y.2 y.3 n.2 n.3 n.4 y.4 ? y.5 y.6 y.7 n.5 y.8
0 republican n y n y y y n n n n n y y y n ?
1 democrat ? y y ? y y n n n n y n y y n n
2 democrat n y y n ? y n n n n y n y n n y
3 democrat y y y n y y n n n n y ? y y y y
4 democrat n y y n y y n n n n n n y y y y
これは動作するはずです:
for col in df.columns():
df.loc[df[col] == 'n', col] = 0
df.loc[df[col] == 'y', col] = 1
df.loc[df[col] == '?', col] = 1
私は最も簡単だと思う replace
by dict
:
np.random.seed(100)
df = pd.DataFrame(np.random.choice(['n','y','?'], size=(5,5)),
columns=list('ABCDE'))
print (df)
A B C D E
0 n n n ? ?
1 n ? y ? ?
2 ? ? y n n
3 n n ? n y
4 y ? ? n n
d = {'n':0,'y':1,'?':1}
df = df.replace(d)
print (df)
A B C D E
0 0 0 0 1 1
1 0 1 1 1 1
2 1 1 1 0 0
3 0 0 1 0 1
4 1 1 1 0 0
応募してみてください
import pandas as pd
# create dataframe
number = [1,2,3,4,5]
sex = ['male','female','female','female','male']
df_new = pd.DataFrame()
df_new['number'] = number
df_new['sex'] = sex
df_new.head()
# create def for category to number 0/1
def tran_cat_to_num(df):
if df['sex'] == 'male':
return 1
Elif df['sex'] == 'female':
return 0
# create sex_new
df_new['sex_new']=df_new.apply(tran_cat_to_num,axis=1)
df_new
生
number sex
0 1 male
1 2 female
2 3 female
3 4 female
4 5 male
使用後適用
number sex sex_new
0 1 male 1
1 2 female 0
2 3 female 0
3 4 female 0
4 5 male 1
これはする必要があります:
df.infants = df.infants.map({ 'Y' : 1, 'N' : 0})
map function を使用して値を変更できます。
例:
x = {'y': 1, 'n': 0}
for col in df.columns():
df[col] = df[col].map(x)
このようにして、データフレームの各列をマップします。
上記のソリューションはすべて正しいですが、あなたができることは次のとおりです。
df["infants"] = df["infants"].replace("Y", 1).replace("N", 0).replace("?", 1)
これは私がもっと注意深く読んだので、replace with dictを使用するのと非常に似ています!