python iloc 错误新列数据框
python iloc errors new column data frame
我有这个 python 脚本,这只是其中的一部分,它可以工作,但只有两行我遇到了麻烦:
not_marketo.loc['Marketo DEP'] = "NO"
yes_marketo.loc[:,'Marketo DEP'] = C
所有可能的方法我都试过了:
not_marketo['Marketo DEP'] = "NO"
not_marketo.loc['Marketo DEP'] = "NO"
not_marketo.loc[:,'Marketo DEP'] = "NO"
"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"
SettingWithCopyWarning:
pandas\core\indexing.py:1596: SettingWithCopyWarning: A value is
trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation:
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
iloc._setitem_with_indexer(indexer, value, self.name)
# Entry Point List (epl)
df_left = df_db[['Email', 'SOURCE', 'Data Entry Point', 'File']]
df_right = df_mto[['Email', 'Entry Point List', 'Marketo']]
df_epl = pd.merge(df_left, df_right, on="Email", how = 'outer')
df_epl.loc[df_epl['Marketo'].isnull(), 'Marketo'] = 'NO'
df_epl.loc[:,'Entry Point List'] = df_epl['Entry Point List'].str.replace('|',' ', regex=True)
# List of Data Entry Points from the Files
dep_list = df_epl[['Data Entry Point']]
dep_list = dep_list.dropna()
dep_list = dep_list.drop_duplicates()
list = dep_list['Data Entry Point'].tolist()
# By Groups
yes_marketo = df_epl[(df_epl['Marketo'] == "YES") & (df_epl['File'].notnull())]
not_marketo = df_epl[(df_epl['Marketo'] == "NO") & (df_epl['File'].notnull())]
not_files = df_epl.loc[df_epl['File'].isnull()]
# If not in Marketo not Entry Data Point
not_marketo.loc['Marketo DEP'] = "NO"
# Check Entry Point List for yes_marketo
C = []
for index, row in yes_marketo.iterrows():
if row['Data Entry Point'] in row['Entry Point List']:
C.append('YES')
else:
C.append('NO')
yes_marketo.loc[:,'Marketo DEP'] = C
您在所示代码中多次不安全地对 DataFrame 进行子集化:
# UNSAFE SUBSET HERE
dep_list = df_epl[['Data Entry Point']]
# UNSAFE SUBSET HERE
yes_marketo = df_epl[(df_epl['Marketo'] == "YES") & (df_epl['File'].notnull())]
# UNSAFE SUBSET HERE
not_marketo = df_epl[(df_epl['Marketo'] == "NO") & (df_epl['File'].notnull())]
# UNSAFE SUBSET HERE
not_files = df_epl.loc[df_epl['File'].isnull()]
可能最简单的修复方法是添加 copy
dep_list = df_epl[['Data Entry Point']].copy()
yes_marketo = df_epl[
(df_epl['Marketo'] == "YES") & (df_epl['File'].notnull())
].copy()
not_marketo = df_epl[
(df_epl['Marketo'] == "NO") & (df_epl['File'].notnull())
].copy()
not_files = df_epl.loc[df_epl['File'].isnull()].copy()
这里有很多细节How to deal with SettingWithCopyWarning in Pandas
我有这个 python 脚本,这只是其中的一部分,它可以工作,但只有两行我遇到了麻烦:
not_marketo.loc['Marketo DEP'] = "NO"
yes_marketo.loc[:,'Marketo DEP'] = C
所有可能的方法我都试过了:
not_marketo['Marketo DEP'] = "NO"
not_marketo.loc['Marketo DEP'] = "NO"
not_marketo.loc[:,'Marketo DEP'] = "NO"
"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"
SettingWithCopyWarning:
pandas\core\indexing.py:1596: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name)
# Entry Point List (epl)
df_left = df_db[['Email', 'SOURCE', 'Data Entry Point', 'File']]
df_right = df_mto[['Email', 'Entry Point List', 'Marketo']]
df_epl = pd.merge(df_left, df_right, on="Email", how = 'outer')
df_epl.loc[df_epl['Marketo'].isnull(), 'Marketo'] = 'NO'
df_epl.loc[:,'Entry Point List'] = df_epl['Entry Point List'].str.replace('|',' ', regex=True)
# List of Data Entry Points from the Files
dep_list = df_epl[['Data Entry Point']]
dep_list = dep_list.dropna()
dep_list = dep_list.drop_duplicates()
list = dep_list['Data Entry Point'].tolist()
# By Groups
yes_marketo = df_epl[(df_epl['Marketo'] == "YES") & (df_epl['File'].notnull())]
not_marketo = df_epl[(df_epl['Marketo'] == "NO") & (df_epl['File'].notnull())]
not_files = df_epl.loc[df_epl['File'].isnull()]
# If not in Marketo not Entry Data Point
not_marketo.loc['Marketo DEP'] = "NO"
# Check Entry Point List for yes_marketo
C = []
for index, row in yes_marketo.iterrows():
if row['Data Entry Point'] in row['Entry Point List']:
C.append('YES')
else:
C.append('NO')
yes_marketo.loc[:,'Marketo DEP'] = C
您在所示代码中多次不安全地对 DataFrame 进行子集化:
# UNSAFE SUBSET HERE
dep_list = df_epl[['Data Entry Point']]
# UNSAFE SUBSET HERE
yes_marketo = df_epl[(df_epl['Marketo'] == "YES") & (df_epl['File'].notnull())]
# UNSAFE SUBSET HERE
not_marketo = df_epl[(df_epl['Marketo'] == "NO") & (df_epl['File'].notnull())]
# UNSAFE SUBSET HERE
not_files = df_epl.loc[df_epl['File'].isnull()]
可能最简单的修复方法是添加 copy
dep_list = df_epl[['Data Entry Point']].copy()
yes_marketo = df_epl[
(df_epl['Marketo'] == "YES") & (df_epl['File'].notnull())
].copy()
not_marketo = df_epl[
(df_epl['Marketo'] == "NO") & (df_epl['File'].notnull())
].copy()
not_files = df_epl.loc[df_epl['File'].isnull()].copy()
这里有很多细节How to deal with SettingWithCopyWarning in Pandas