将数据框列中的整数替换为'Y'

时间:2017-10-29 14:53:14

标签: python pandas dataframe pivot-table

我有一个带有两列的数据框:我使用数据透视表创建的Account,Bought Food将每个帐户压缩成一行。现在它向我展示了作为数字购买的总食物,但是我可以改变数据以显示只有整数的'Y'(我已经使用fillna函数替换NaN w / No)。

示例:

电流: AcctNo BoughtFood 1ABC 5 2ABD N. 3DBC 7

需要: AcctNo BoughtFood 1ABC Y. 2ABD N. 3DBC Y

1 个答案:

答案 0 :(得分:2)

to_numeric + notnullapply + isinstance创建布尔值掩码:

#if all data strings, also numeric
m = pd.to_numeric(df['BoughtFood'], errors='coerce').notnull()
#if mixed df - numeric with strings
m = ~df['BoughtFood'].apply(lambda x: isinstance(x, str))
#or
m = df['BoughtFood'].apply(lambda x: isinstance(x, (int, float)))

然后按locmask设置值:

df.loc[m, 'BoughtFood'] = 'T'
print (df)
  AcctNo BoughtFood
0   1ABC          T
1   2ABD          N
2   3DBC          T
df['BoughtFood'] = df['BoughtFood'].mask(m, 'T')
print (df)
  AcctNo BoughtFood
0   1ABC          T
1   2ABD          N
2   3DBC          T

多列解决方案:

cols = ['BoughtFood','BoughtWater']
m = df[cols].apply(lambda x: pd.to_numeric(x, errors='coerce')).notnull()
df[cols] = df[cols].mask(m, 'T')
print (df)
  AcctNo BoughtFood BoughtWater
0   1ABC          T           N
1   2ABD          N           T
2   3DBC          T           T