我相信有一个简单的问题。我有一个熊猫数据框df
看起来很像这样:
data = [{"Text" : "Dog", "Dog" : 1},
{"Text" : "Cat", "Dog" : 0},
{"Text" : "Mouse", "Dog" : 0},
{"Text" : "Dog", "Dog" : 1}]
df = pd.DataFrame(data)
我正在尝试在Text
列中搜索许多关键字,并计算它们在每个单元格中出现的次数。结果应该存储在新列中,该列显示找到特定关键字的次数。结果应该像Dog
列一样。
我尝试使用pandas
str.count
。它工作正常。但是,当我尝试将结果存储在新列中时,我遇到了麻烦:
mykewords = ('Cat', 'Mouse')
df['Cat'] = df.Text.str.count("Cat")
我收到以下错误消息:
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
if __name__ == '__main__':
我有两个问题:
mykeywords
中的所有关键字并分别获得一列?非常感谢您提前提供的帮助!
答案 0 :(得分:2)
只需使用最新版本更新熊猫,然后尝试以下代码。对我来说,这就像一种魅力。
let user = await User.findOne({ email: req.body.email });
const token = user.generateAuthToken();
答案 1 :(得分:0)
如果文本中可能有多个值,并且需要计数值:
mykewords = ('Cat', 'Mouse')
for x in mykewords:
df[x] = df.Text.str.count(x)
更好的解决方案是使用带有Series.str.findall
和Series.str.len
的单词边界:
for x in mykewords:
df[x] = df.Text.str.findall(r"\b{}\b".format(x)).str.len()
解决方案的差异:
data = [{"Text" : "Dog Cat Catman", "Dog" : 1},
{"Text" : "Cat Cat", "Dog" : 0},
{"Text" : "Mouse Cat", "Dog" : 0},
{"Text" : "Dog", "Dog" : 1}]
df = pd.DataFrame(data)
df1 = df.copy()
print (df)
Dog Text
0 1 Dog Cat Catman
1 0 Cat Cat
2 0 Mouse Cat
3 1 Dog
mykewords = ('Cat', 'Mouse')
for x in mykewords:
df[x] = df.Text.str.findall(r"\b{}\b".format(x)).str.len()
print (df)
Dog Text Cat Mouse
0 1 Dog Cat Catman 1 0 <-not match Catman
1 0 Cat Cat 2 0
2 0 Mouse Cat 1 1
3 1 Dog 0 0
for x in mykewords:
df1[x] = df1.Text.str.count(x)
print (df1)
Dog Text Cat Mouse
0 1 Dog Cat Catman 2 0 <-match Catman
1 0 Cat Cat 2 0
2 0 Mouse Cat 1 1
3 1 Dog 0 0