Python &引用;试图在来自数据帧的切片副本上设置一个值";尝试设置数据帧值时出现警告
我只是想在pandas DataFrame中做一个简单的值修改操作Python &引用;试图在来自数据帧的切片副本上设置一个值";尝试设置数据帧值时出现警告,python,pandas,dataframe,Python,Pandas,Dataframe,我只是想在pandas DataFrame中做一个简单的值修改操作 import pandas as pd import numpy as np x = np.linspace(1,10,10) y = x * 2 z = [-1,-2,-3,4,5,6,7,8,9,10] df = pd.DataFrame(columns=['x','y','z']) df['x'] = x df['y'] = y df['z'] = z for i in range(len(df['z'])):
import pandas as pd
import numpy as np
x = np.linspace(1,10,10)
y = x * 2
z = [-1,-2,-3,4,5,6,7,8,9,10]
df = pd.DataFrame(columns=['x','y','z'])
df['x'] = x
df['y'] = y
df['z'] = z
for i in range(len(df['z'])):
if df['z'].iloc[i] < 0:
df['x'].iloc[i] *= -1
df['y'].iloc[i] *= -1
df['z'].iloc[i] *= -1
将熊猫作为pd导入
将numpy作为np导入
x=np.linspace(1,10,10)
y=x*2
z=[-1,-2,-3,4,5,6,7,8,9,10]
df=pd.DataFrame(列=['x'、'y'、'z'])
df['x']=x
df['y']=y
df['z']=z
对于范围内的i(len(df['z']):
如果df['z'].iloc[i]<0:
df['x'].iloc[i]*=-1
df['y'].iloc[i]*=-1
df['z'].iloc[i]*=-1
但是它警告:设置为CopyWarning:
试图在数据帧切片的副本上设置值
我不知道在这种情况下是如何使用链式作业的
它给了我正确的答案,但速度要慢得多
感谢如果循环速度较慢,那么最好避免它,如果可能的话,使用矢量化熊猫函数 我认为您可以使用和,如果条件为
真
乘以-1
:
df = df.mask(df['z'] < 0, df.mul(-1))
print (df)
x y z
0 -1.0 -2.0 1
1 -2.0 -4.0 2
2 -3.0 -6.0 3
3 4.0 8.0 4
4 5.0 10.0 5
5 6.0 12.0 6
6 7.0 14.0 7
7 8.0 16.0 8
8 9.0 18.0 9
9 10.0 20.0 10
df.loc[df['z'] < 0] *= -1
print (df)
x y z
0 -1.0 -2.0 1
1 -2.0 -4.0 2
2 -3.0 -6.0 3
3 4.0 8.0 4
4 5.0 10.0 5
5 6.0 12.0 6
6 7.0 14.0 7
7 8.0 16.0 8
8 9.0 18.0 9
9 10.0 20.0 10