在使用df["star"] = df["star"].astype(int)和df["sentiment"] = df["star"].apply(lambda x: 1 if x >= 1 else 0)后,出现了新的报错ValueError: invalid literal for int() with base 10: '1\u200b',该如何解决
时间: 2023-06-17 11:02:38 浏览: 71
这个错误提示中的 `\u200b` 表示的是 Unicode 中的零宽空格字符,这可能是由于数据中存在一些不可见的字符导致的。你可以尝试先使用 `strip()` 方法去掉字符串两端的空格,再进行类型转换和判断,例如:
```
df["star"] = df["star"].str.strip().astype(int)
df["sentiment"] = df["star"].apply(lambda x: 1 if x >= 1 else 0)
```
这样就可以先去掉不可见字符,再进行类型转换和判断了。如果还有其他的不可见字符,可以使用 `replace()` 方法将其替换成空字符。
相关问题
在使用df["star"] = df["star"].str.strip().astype(int)和df["sentiment"] = df["star"].apply(lambda x: 1 if x >= 1 else 0)之后出现了报错ValueError: invalid literal for int() with base 10: '1\u200b'
这个错误是因为字符串中含有不可见字符"\u200b"(零宽空格),需要先将字符串中的不可见字符去掉才能转换为整数。你可以使用str.replace()方法来去掉不可见字符,例如:
```
df["star"] = df["star"].str.replace('\u200b', '').str.strip().astype(int)
```
这行代码先使用str.replace()方法将字符串中的不可见字符替换为空字符串,然后再使用str.strip()方法去除字符串两端的空格,最后使用astype(int)方法将字符串转换为整数类型。这样就可以避免出现报错了。
r = requests.get('https://www.yelp.com/biz/social-brew-cafe-pyrmont') soup = BeautifulSoup(r.text, 'html.parser') regex = re.compile('.*comment.*') results = soup.find_all('p', {'class':regex}) reviews = [result.text for result in results] import numpy as np import pandas as pd df = pd.DataFrame(np.array(reviews), columns=['review']) df['review'].iloc[0] def sentiment_score(review): tokens = tokenizer.encode(review, return_tensors='pt') result = model(tokens) return int(torch.argmax(result.logits))+1 sentiment_score(df['review'].iloc[1]) df['sentiment'] = df['review'].apply(lambda x: sentiment_score(x[:512])) print(df) print(df['review'].iloc[3]) 解释
这段代码是爬取一个网页上的评论,并对评论进行情感分析。首先,使用requests库获取网页的内容。然后,使用BeautifulSoup库解析网页内容。接着,使用正则表达式找到所有包含评论的`<p>`标签。然后,将这些评论存储在一个DataFrame中,并取出第一个评论进行情感分析。情感分析的函数`sentiment_score`使用了一个预训练的模型,并将评论转换为tokens后输入模型,得到情感分析的结果。最后,将情感分析结果存储在DataFrame中,并打印出整个DataFrame和第四条评论。
阅读全文