Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么这段试图用比较来更新pandas列的代码不起作用?_Python_Pandas_Dataframe - Fatal编程技术网

Python 为什么这段试图用比较来更新pandas列的代码不起作用?

Python 为什么这段试图用比较来更新pandas列的代码不起作用?,python,pandas,dataframe,Python,Pandas,Dataframe,因此,标签列是'SARCASM'或'NOT_SARCASM' 我可以像这样反复浏览该列: for v in df['label']: if v == 'SARCASM': v = 1 else: v = 0 但是赋值v=1和v=0不会更新该列条目。if v=='SARCASM'似乎在工作,因为我可以让它打印其他内容,但是v=1没有任何作用。因为v只是一个局部变量(在for循环迭代中),所以只覆盖它,而不是该列。(数据帧不知道关于'v'的任何信息)

因此,
标签
列是
'SARCASM'
'NOT_SARCASM'

我可以像这样反复浏览该列:

for v in df['label']:
    if v == 'SARCASM':
        v = 1
    else:
        v = 0

但是赋值
v=1
v=0
不会更新该列条目。
if v=='SARCASM'
似乎在工作,因为我可以让它打印其他内容,但是
v=1
没有任何作用。

因为
v
只是一个局部变量(在for循环迭代中),所以只覆盖它,而不是该列。(数据帧不知道关于
'v'
的任何信息)

您希望分配给列
df['label']
本身。
在这种情况下,您可以直接进行字符串比较,这会给出一个布尔值,并将其转换为整数(1/0):

或者对于多个字符串到(整数)值的更一般的映射:

(顺便说一句,您可以通过使用
df['col'].apply()
df['col'].map()
等。请参见。)

您可以使用map方法进行转换

map_val = {'SARCASM':1, 'NOT_SARCASM':0}
df['label'] = df['label'].map(map_val)
我想你想要:

df['label'] = (df['label'] == 'SARCASM').astype(int)

至于你的代码为什么不起作用,我相信当你在
df['label']
上循环时,你实际上是在数据的副本上循环,例如,你不能在循环中修改序列的元素。

Wow like magic。非常感谢,我将仔细阅读map函数。欢迎使用so。到目前为止
map_val = {'SARCASM':1, 'NOT_SARCASM':0}
df['label'] = df['label'].map(map_val)
df['label'] = (df['label'] == 'SARCASM').astype(int)