我有以下数据框。我现在要做的是添加一个包含单词数量的额外列。
import pandas as pd
df = pd.DataFrame([['These are two words', 1], ['Two words', 2]], columns=('body', 'ticketID'))
所以我这样做:
data['Count'] = ''
for index, i in data.iterrows():
y = len(i['Content'])
i['Count'] = y
然而,当我现在打印数据时,我看不到计数中的任何值。关于这里出了什么问题的任何建议?
答案 0 :(得分:0)
我看到你的实施有些问题。
首先,在2个代码块中,您使用的是不同的变量。在第一个中,您的数据框称为df
,而在第二个中,它称为data
。这是偶然的吗?
其次,您的变量y
不计算单词数,而只计算字符串的长度。为了计算字符串中单词的数量,您可以使用len
string.split()
,string.split(',')
会在每次遇到空格时分割字符串。如果要拆分另一个角色,可以简单地将角色作为参数:loc
。
最后,pandas数据帧和系列有3种不同的函数用于索引和选择数据:
iloc
用于基于标签的索引ix
用于基于索引的索引df['Count']
用于混合索引使用这些函数比标准Python索引更受欢迎,例如:将df.loc[:, 'Count']
替换为import pandas as pd
df = pd.DataFrame([['These are two words', 1], ['Two words', 2]], columns=('body', 'ticketID'))
df.loc[:, 'Count'] = ''
for idx, row in df.iterrows():
num_words = len(row.loc['body'].split())
df.ix[idx, 'Count'] = num_words
>>> df
body ticketID Count
0 These are two words 1 4
1 Two words 2 2
。有关此内容的更多信息,请访问in the docs。
所以这里有一个你想要的版本:
df.apply
使用df.loc[:, 'count'] = df.apply(lambda row: len(row.loc['body'].split()), axis=1)
函数还有一个很好的Pythonic单线程:
$scope.obj = {
name : "ok",
list : [{object},{object2}]
}
var index =$scope.obj.list.indexOf({object});
$scope.obj.list.splice(index,1);