是否可以在一条指令中更改所有行值?

时间:2019-05-18 17:16:31

标签: python pandas

我有一个熊猫数据框:

df = pd.read_csv("PastHires.csv") 

我有“雇用”列,其中包含Y / N值。我想让它们为1或0来绘制它们。 有可能实现这样的目标吗?

df['Hired'] = 1 if df['Hired'] is 'Y' else 0

目前将0放入所有行:(

编辑: 根据0x2bad错误修复:

dist = df[['Previous employers','Hired']][4:10]
dist['Hired'] = 1 if dist['Hired'] == 'Y' else 0

但抛出“系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。”

3 个答案:

答案 0 :(得分:3)

使用numpy.where

df['Hired'] = pd.np.where(df.Hired == 'Y', 1, 0)

pandas.Series.map

df['Hired'] = df.Hired.map({'Y': 1, 'N', 0})

效率较低,但可以处理两种以上的情况。

请注意,在1000多行中,这些速度比apply要快。

答案 1 :(得分:1)

我认为您正在寻找apply方法pandas.Series.apply,该方法可用于为Series中的每个值运行一个函数。

在您的情况下,使用匿名功能...

df['Hired'] = df['Hired'].apply(lambda x: 1 if x == 'Y' else 0)

...,其中x是系列中的每个值。

答案 2 :(得分:1)

更像

df['Hired'] = df.Hired.eq('Y').astype(int)