Python - SettingWithCopyWarning - 使用 for 循环创建列
Python - SettingWithCopyWarning - Create a column using for loop
基于 'column_name' 中的文本,我想在新列中创建一行,returns 与 'column_name' 中找到的文本关联的字符串。这是代码:
temp_2 = []
for index,row in df2.iterrows():
if 'abc' in row['column_name']:
temp_2.append('A')
elif 'def'in row['column_name']:
temp_2.append('B')
elif 'ghk'in row['column_name']:
temp_2.append('C')
else:
temp_2.append('Other')
df2['Temp_2'] = temp_2
df2
Python returns:
/tmp/ipykernel_33624/2126258456.py:20: SettingWithCopyWarning:
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
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df2['Temp_2'] = temp_2
如何修改代码以消除警告?
删除警告:-)
import warnings
warnings.filterwarnings("ignore")
为了更简洁的代码,您可以试试这个:-)
df['Temp_2']='Other'
df['Temp_2'][df.column_name.str.contains('abc')]='A'
df['Temp_2'][df.column_name.str.contains('def')]='B'
df['Temp_2'][df.column_name.str.contains('ghk')]='C'
df
基于 'column_name' 中的文本,我想在新列中创建一行,returns 与 'column_name' 中找到的文本关联的字符串。这是代码:
temp_2 = []
for index,row in df2.iterrows():
if 'abc' in row['column_name']:
temp_2.append('A')
elif 'def'in row['column_name']:
temp_2.append('B')
elif 'ghk'in row['column_name']:
temp_2.append('C')
else:
temp_2.append('Other')
df2['Temp_2'] = temp_2
df2
Python returns:
/tmp/ipykernel_33624/2126258456.py:20: SettingWithCopyWarning:
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
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df2['Temp_2'] = temp_2
如何修改代码以消除警告?
删除警告:-)
import warnings
warnings.filterwarnings("ignore")
为了更简洁的代码,您可以试试这个:-)
df['Temp_2']='Other'
df['Temp_2'][df.column_name.str.contains('abc')]='A'
df['Temp_2'][df.column_name.str.contains('def')]='B'
df['Temp_2'][df.column_name.str.contains('ghk')]='C'
df