我有一个DataFrame
对象df
。我想修改job
列,以便所有退休人员均为1,其余为0(如here所示):
df['job'] = df['job'].apply(lambda x: 1 if x == "retired" else 0)
但是我得到警告:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
为什么我在这里得到它?根据我的阅读,它适用于以下情况:我先切成一行,然后是一列,但是这里我只是在一行中修饰元素。有更好的方法吗?
用途:
df['job']=df['job'].eq('retired').astype(int)
或
df['job']=np.where(df['job'].eq('retired'),1,0)
所以这是一个示例数据框:
import pandas as pd
import numpy as np
data = {'job':['retired', 'a', 'b', 'retired']}
df = pd.DataFrame(data)
print(df)
job
0 retired
1 a
2 b
3 retired
现在,您可以使用numpy的where
函数:
where
我不建议在此处使用Apply,因为在大数据帧的情况下,它可能会降低性能。
我希望使用df['job'] = np.where(df['job']=='retired', 1, 0)
print(df)
job
0 1
1 0
2 0
3 1
或numpy.select
。
numpy.where
See This