web-dev-qa-db-ja.com

データフレームの値を変更する方法Python

過去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
11
handavidbang

これは動作するはずです:

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
8
Luis Miguel

私は最も簡単だと思う 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
10
jezrael

応募してみてください

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
2
Dondon Jie

これはする必要があります:

df.infants = df.infants.map({ 'Y' : 1, 'N' : 0})

1

map function を使用して値を変更できます。

例:

x = {'y': 1, 'n': 0}

for col in df.columns():
    df[col] = df[col].map(x)

このようにして、データフレームの各列をマップします。

1
forayer

上記のソリューションはすべて正しいですが、あなたができることは次のとおりです。

df["infants"] = df["infants"].replace("Y", 1).replace("N", 0).replace("?", 1)これは私がもっと注意深く読んだので、replace with dictを使用するのと非常に似ています!

0
May Pilijay El