如何在不获取SettingWithCopyWarning的情况下修改DataFrame列?

问题描述 投票:0回答:3

我有一个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

为什么我在这里得到它?根据我的阅读,它适用于以下情况:我先切成一行,然后是一列,但是这里我只是在一行中修饰元素。有更好的方法吗?

python pandas
3个回答
1
投票

用途:

df['job']=df['job'].eq('retired').astype(int)

df['job']=np.where(df['job'].eq('retired'),1,0)

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

0
投票

我不建议在此处使用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

© www.soinside.com 2019 - 2024. All rights reserved.