- 1
df[df['reason']=='in-in error sequence']['spider'].value_counts().to_csv('spiders_out-out-seq.csv')
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−116
df[df['reason']=='in-in error sequence']['spider'].value_counts().to_csv('spiders_out-out-seq.csv')
Страшно?
Что за формат такой?
Похожий подход используется в numpy, там можно написать что-то вроде
a[a < 0] = 0
чтобы обнулить все отрицательные элементы.
a.__lt__(0) возвращает объект, хранящий условие, которой потом передается как индекс?
Почему мнение нубов должно кого-то волновать?
Почему, например, вклад в развитие языка и инфраструктуры не является параметром для вычисления востребованости?
>Почему мнение нубов должно кого-то волновать?
Пардон, но хелловердщики / быдлокодеры на numpy и есть нубы по сравенению с веб-девелами, которые используют гораздо большую часть языка, а не пишут си на питоне. Или есть пруфы на противное?
Ну и мне интересно, насколько часто люди пишут 0 < X вместо X > 0.
Это, безусловно, недостаток. В основном убогой ООП-говноконцепции "только объекты, только вызовы методов" и питушиной динамизации.
В крестах, например, можно без проблем написать перегрузку оператора для полной симметрии.
MyExpression operator<(int value, MyField field);
MyExpression operator>(MyField field, int value);
думаю, перегрузка - не совсем правильное слово в контексте пистона.
как перегрузка связана с ООП?
Это такая штука, из-за которой появилось boost::lambda? Ну и забористое же курево было у разрабов, тоже хочу.
> Кругом и рядом такое используется для построения DSL.
Ото всей души надеюсь, что никогда такого не встречу :)
Любой массив можно проиндексировать булевым массивом такой же размерности, получив view (одномерный массив) элементов для которых индекс истинен. Если над этим view производить операции, будет затронут исходный массив.
Массив - это list или хрень из numpy? В питоне можно как-то так:
lst[1,3..5,9]
>>> a = numpy.array([1,2,3,4])
>>> a<3
array([ True, True, False, False], dtype=bool)
>>> 3>a
array([ True, True, False, False], dtype=bool)
А вот сравнение считается симметричным, так что если 3.__gt__(a) возвращает NotImplemented, то интерпретатор пробует зайти с другого фланга и вызывает a.__lt__(3), что уже срабатывает нормально.
Во всяком случае, я так понял доки.
<method-wrapper '__gt__' of type object at 0x1E1DB538>
Тут я и сам не очень понял, но вблизи корня дерева объектов всегда творится какая-то чертовщина. В какой-то момент им же надо перейти к нативному коду.
AttributeError: 'int' object has no attribute '__gt__'
Да, различия между сишным апи и питоновским заябывают.
Type "help", "copyright", "credits" or "license" for more information.
>>> issubclass(int, object)
True
>>> isinstance(3, object)
True
In [29]: class A: pass
In [30]: isinstance(A(), object)
Out[30]: True
Стоп, а нахуя тогда явно наследоваться от объекта?
Up to Python 2.1, old-style classes were the only flavour available to the user. The concept of (old-style) class is unrelated to the concept of type: if x is an instance of an old-style class, then x.__class__ designates the class of x, but type(x) is always <type 'instance'>. This reflects the fact that all old-style instances, independently of their class, are implemented with a single built-in type, called instance.
New-style classes were introduced in Python 2.2 to unify classes and types. A new-style class is neither more nor less than a user-defined type. If x is an instance of a new-style class, then type(x) is typically the same as x.__class__ (although this is not guaranteed - a new-style class instance is permitted to override the value returned for x.__class__).
Ряд фишек типа property доступен только новым классам.
У меня в проекте вот такое есть
if (isset($suppliers_makes_data[$list_office_logo[$j]][$list_supplier_logo[$j]][$list_direction[$j]][$make_logo]['max_price']) && $suppliers_makes_data[$list_office_logo[$j]][$list_supplier_logo[$j]][$list_direction[$j]][$make_logo]['max_price']>0)
и ничего жив здоров. Переписываю потихоньку
df - от DataFrame.
А фишка с индексацией называется "fancy indexing"
Собственно я недоосилила мерж датафреймов и сделала наполовину руками.
И да, пандас далеко не везде удобность потому что оно должно работать быстро.
Э-э. Это заглушка?
Бля, ну это же на отдельный гк тянет :) или report.values(), или list()
Давно на питоне?
Я так предполагаю, что все эти map(lambda ...) можно было короче и компактнее переписать циклами.
Т.е. map(lambda x: x[0], x[1], something.to_dict().items()) явно же лучше было записать:
[for key, value in something.to_dict().items()], а может и to_dict() не нужно было...
В одну строчку тип. Если серьезно, что плохого в таком коде? Говорят, что удаление ссылок не гарантирует удаление объекта гц, но обычно почему-то он удаляется, это явно не мегапроект, где это было бы важно.
>переписать циклами
Списковыми выражениями?
continue
Тот самый код?
Вот тут мне аж похорошело :) Обход циклом словаря
r же у нас dict?
Не думал, что нужно тебе это объяснять, но этот код Преобразует в int значения для всех ключей, кроме ключа 'spider'. Как твой код решает эту же задачу, я не понял.
А во втором - проверяется есть ли такой ключ.
Мне кажется или это немного не то?
Ну и еще вот это можно было короче записать.
Я расскажу что происходит
Берется баальшой пак данных состоящий из записей типа id | spider | error type | url | time, смотрятся какие есть ошибки, смотрятся какие есть спайдеры.
Берется каждая ошибка, по ней смотрится количество ошибок для каждого спайдера. Потом это количество приводится к тому инту которое жрет json + спайдеры по которым в данной категории нету ошибок ставится ключ и значение 0.
То есть получается таблица типа
спайдер | количество ошибок а | количество ошибок б
От этого и все пляски.
Я позже буду строить другие фасеты по конкретным потокам данных которые светятся чаще всего и по времени когда это происходит)