python iloc错误新列数据帧

2024-05-16 19:00:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: nodfdatanotloclistyespoint
1条回答
网友
1楼 · 发布于 2024-05-16 19:00:40

在显示的代码中,您多次不安全地对数据帧进行子集设置:

# 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()]

可能最简单的修复方法是添加^{}

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

相关问题 更多 >