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)