首页 > 解决方案 > 为什么我不能只更改一个 pandas 列中的值?

问题描述

我的数据框中有一列我有电子邮件而不是电子邮件。

有了这个切片,我只能得到没有电子邮件的字段:

df[~df['email'].str.contains('@', case=False)]['email']

但是当我尝试用我喜欢的值替换它时:

df[~df['email'].str.contains('@', case=False)]['email'] = 'No'

该列没有收到更改。

我没有收到任何错误,只有以下警告:

/home/rockstar/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:1: 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: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  """Entry point for launching an IPython kernel.

跟随我的完整数据框的图像:

Python

此外,df[~df['email'].str.contains('@',case=False)] = 'No'效果很好,但我最终会丢失线路其余部分的数据

标签: pythonpandasdataframe

解决方案


请参阅以下示例代码。

import pandas as pd
df = pd.DataFrame({"E-mail":["abc@de", "abcde"]})
df['E-mail'].loc[~df['E-mail'].str.contains('@', case = False)] = 'No'

推荐阅读