我有一个包含2条记录的数据框(数据):
id text
0001 The farmer plants grain
0002 tuna
我想计算此数据框的text
列中的字数,并只删除一个字。
我知道如何计算单词数量:
count = data['text'].str.split().str.len()
如何使用结果运行将丢弃数据帧中的行的IF语句?任何IF语句,如......
if count == 1:
print('drop')
...导致此错误:
Traceback (most recent call last):
File "<ipython-input-118-b3fcb0218e8e>", line 32, in <module>
if count == 1:
File "C:\Users\taca\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\generic.py", line 917, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我已经阅读了关于此错误的Pandas文档和其他SO问题,但我似乎无法通过IF语句正确应用我的问题的解决方案。
非常感谢任何建议!由于我对SO比较陌生,请告诉我是否有什么可以改进我的问题。
答案 0 :(得分:2)
我只是看看它是否有空格
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSDictionary *body = @{@"search": self.searchBar.text};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:body options:0 error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSString *url = @"https://iosdevfitbody.herokuapp.com/fitbodylocations/search.json";
NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:url parameters:nil error:nil];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
[[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
if (!error) {
if ([responseObject isKindOfClass:[NSDictionary class]]) {
self.results = [[NSMutableArray alloc] initWithArray:[responseObject objectForKey: @"message"]];
}
} else {
NSLog(@"Error: %@, %@, %@", error, response, responseObject);
}
}]resume];
或更一般地使用count
data = data[data.text.str.contains(' ')]
data
id text
0 0001 The farmer plants grain
出了什么问题!
data = data[data.text.str.count(' ') > 0]
data
id text
0 0001 The farmer plants grain
运行此结果会导致count = data['text'].str.split().str.len()
长度为count
。
pandas.Series
是count == 1
真值。 pandas.Series
毫无意义,因为它会尝试确定整个系列是否为if count == 1
。它不是True
或True
。您必须以不同方式使用它来实现目标。我提供了一种方法。 @StevenG也是如此。
答案 1 :(得分:1)
使用面具:
dropped = data[~(count==1)].copy()
说明:
所以假设这样的df有:
data = pd.DataFrame({'text': ['hello my name is','hey']})
使用你的count方法你可以检查它是否为1,创建一个布尔掩码:
count = data['text'].str.split().str.len()
~(count==1)
Out[18]:
0 True
1 False
Name: text, dtype: bool
现在您可以应用该面具:
data[~(count==1)]
Out[22]:
text
0 hello my name is
答案 2 :(得分:0)
只需对数据帧使用条件参数即可。它会是这样的:
df = df [df ['column']。str.contains('')]
假设两个词之间有空格。
答案 3 :(得分:0)
回答可能很晚,但可以帮助新观众。
您可以轻松找到与所需行匹配的行索引,并将其从数据框中删除。
@classmethod
def create staff_user(cls, **kwargs):
email = kwargs.pop('email')
password = kwargs.pop('password')
kwargs['published_date'] = timezone.now()
kwargs['user'] = User.objects.create_user(
email=email,
password=password,
is_staff=True,
is_active=1
)
return cls.objects.create(**kwargs)