删除熊猫数组中列表的第一部分而不警告"trying to be set on a copy of a slice"



我想删除组合列中的第一项。我该怎么做?

我有:

df2= pd.DataFrame({'x': [1,1,None],
'y': [1,3,5],
'z': [None,5,7]})
df2['combine'] = df2[['x', 'y', 'z']].values.tolist()
df2['combine'] = df2['combine'].apply(lambda el: [x for x in el if pd.notna(x)]).astype(int)
x       y    z          combine
0  1      1    NaN       [1.0, 1.0]
1  1      3    5.0     [1.0, 3.0, 5.0]
2  None   5     7      [None, 5.0, 7.0]

我想要:

x       y    z          combine
0  1      1    NaN     [1.0]
1  1      3    5.0     [1.0, 3.0, 5.0]
2  None   5     7      [None, 5.0, 7.0]

我试过:

df2['combine'][0] = df2['combine'][0][1:]
df2['combine'][0] = df2['combine'][0][1:].copy()

我确实得到了正确的数组,但我得到了这个警告。"试图在来自DataFrame"的切片的副本上设置一个值;我需要做些什么才能在不收到错误消息的情况下删除此值?

试用at

df2.at[0,'combine'] = df2.at[0,'combine'][1:]
df2.loc[:1, "combine"] = df2.loc[:1, "combine"].apply(lambda x: x[1:])
print(df2)

打印:

x  y    z           combine
0  1.0  1  NaN             [1.0]
1  1.0  3  5.0        [3.0, 5.0]
2  NaN  5  7.0  [None, 5.0, 7.0]

尝试

df2['combine'] = df2['combine'].str[1:]

相关内容

最新更新