如何更改数据框Python中的值

han*_*ang 12 python replace dataframe pandas

我搜索过去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
Run Code Online (Sandbox Code Playgroud)

我的解决方案如下.这不会导致错误,但数据框中的值不会更改.我假设我需要做像df = df_new这样的事情.但是怎么做呢?

for coln in df:
for value in coln: 
        if value == 'y':
            value = '1'
        elif value == 'n':
            value = '0'
        else: 
            value = '1'
Run Code Online (Sandbox Code Playgroud)

编辑:此数据集中有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
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 11

我认为最简单的用途replacedict:

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
Run Code Online (Sandbox Code Playgroud)


Lui*_*uel 10

这应该工作:

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
Run Code Online (Sandbox Code Playgroud)