Обработка канала Bash

Я считаю, что синтаксис предыдущих ответов является избыточным и трудно запоминаемым. Пандас представил метод query() в v0.13, и я предпочитаю его. Для вашего вопроса вы можете сделать df.query('col == val')

Воспроизводится из http://pandas.pydata.org/pandas-docs/version/0.17.0/indexing.html#indexing-query

In [167]: n = 10

In [168]: df = pd.DataFrame(np.random.rand(n, 3), columns=list('abc'))

In [169]: df
Out[169]: 
          a         b         c
0  0.687704  0.582314  0.281645
1  0.250846  0.610021  0.420121
2  0.624328  0.401816  0.932146
3  0.011763  0.022921  0.244186
4  0.590198  0.325680  0.890392
5  0.598892  0.296424  0.007312
6  0.634625  0.803069  0.123872
7  0.924168  0.325076  0.303746
8  0.116822  0.364564  0.454607
9  0.986142  0.751953  0.561512

# pure python
In [170]: df[(df.a < df.b) & (df.b < df.c)]
Out[170]: 
          a         b         c
3  0.011763  0.022921  0.244186
8  0.116822  0.364564  0.454607

# query
In [171]: df.query('(a < b) & (b < c)')
Out[171]: 
          a         b         c
3  0.011763  0.022921  0.244186
8  0.116822  0.364564  0.454607

Вы также можете получить доступ к переменным в среде, добавив @.

exclude = ('red', 'orange')
df.query('color not in @exclude')

30
задан Fred Foo 23 May 2013 в 16:36
поделиться

3 ответа

Я решил записать немного более подробное объяснение.

"волшебство" здесь находится в операционной системе. Обе программы действительно запускают примерно в то же время и работают одновременно (операционная система присваивает им части времени на процессоре для выполнения) как любой одновременно рабочий процесс на компьютере (включая терминальное приложение и ядро). Так, прежде чем любые данные передаются, процессы делают любую необходимую инициализацию. В Вашем примере хвост анализирует '-20' аргументов, и кошка анализирует аргумент 'file.txt' и открывает файл. В какой-то момент хвост перейдет к сути дела, где он должен ввести, и он скажет операционной системе, что ожидает входа. В некоторой другой точке (или прежде или после, это не имеет значения) кошка запустит передающие данные к операционной системе с помощью stdout. Это входит в буфер в операционной системе. Следующий раз выслеживает, получает интервал времени на процессоре после того, как некоторые данные были помещены в буфер кошкой, это получит некоторый объем тех данных (или все это), который оставляет буфер в операционной системе. Когда буфер пуст, в какой-то момент хвост должен будет ожидать кошки для вывода большего количества данных. Если кошка произведет данные намного быстрее, чем хвост обрабатывает его, буфер расширится. кошка будет в конечном счете сделана, производя данные, но хвост будет все еще обрабатывать, таким образом, кошка закроется, и хвост обработает все остающиеся данные в буфере. Операционная система будет сигнализировать о хвосте, когда их больше не поступит данные с EOF. Хвост обработает остающиеся данные. В этом случае хвост, вероятно, просто получает все данные в кольцевой буфер 20 строк, и когда сообщено операционной системой, что там больше не поступает данные, это затем выводит последние двадцать строк к своему собственному stdout, который просто отображен в терминале. Так как хвост является намного более простой программой, чем кошка, он, вероятно, проведет большую часть времени, ожидая кошки для помещения данных в буфер.

В системе с несколькими процессорами, эти две программы будут только совместно использовать переменные интервалы времени на том же ядре процессора, но вероятно работать одновременно на отдельных ядрах.

Для вхождения в немного большее количество детали при открытии некоторого монитора процесса (конкретная операционная система) как 'вершина' в Linux, Вы будете видеть целый список выполнения процессов, большинство которых эффективно использует 0% процессора. Большинство приложений, если они не уплотняют данные, проводит большую часть своего времени, ничего не делая. Это хорошо, потому что это позволяет другим процессам иметь беспрепятственный доступ к процессору согласно их потребностям. Это выполняется в основном тремя способами. Процесс мог получить ко сну (n) инструкцию по стилю, где это в основном говорит ядру ожидать n миллисекунды прежде, чем дать ему другой интервал времени для работы с. Обычно программа должна ожидать чего-то из другой программы, как 'хвост', ожидающий большего количества данных для ввода буфера. В этом случае операционная система разбудит процесс, когда больше данных будет доступно. Наконец, ядро может вытеснить процесс посреди выполнения, дав некоторые части процессорного времени другим процессам. 'кошка' и 'хвост' являются простыми программами. В этом примере хвост тратит большую часть из, время, ожидая большего количества данных по буферу, и кошка тратит большую часть из, время, ожидая операционной системы для получения данных из жесткого диска. Узкое место является скоростью (или замедление) физической среды, на которой хранится файл. Та заметная задержка, которую Вы могли бы обнаружить при выполнении этой команды впервые, является временем, которое требуется для считывающих головок на дисководе для поиска на позицию по жесткому диску, где 'file.txt'. При выполнении команды во второй раз операционная система будет, вероятно, иметь содержание file.txt кэшируемым в памяти, и Вы будете вряд ли видеть любую заметную задержку (если file.txt не будет очень большим, или файл больше не кэшируется.)

Большинство операций, которые Вы делаете на своем компьютере, является связанным IO, который должен сказать, что Вы обычно ожидаете данных для прибытия из жесткого диска, или из сетевого устройства, и т.д.

55
ответ дан 27 November 2019 в 23:50
поделиться

Shog9 уже сослался на статью Wikipedia, но раздел реализации имеет детали, которые Вы хотите. Базовое внедрение является ограниченным буфером.

1
ответ дан 27 November 2019 в 23:50
поделиться

кошка просто распечатает данные к стандарту, который, оказывается, перенаправляется к стандарту в хвоста. Это видно в странице справочника удара.

, Другими словами, нет никакого продолжения приостановки, хвост просто читает из стандарта в, и кошка просто пишет в стандарт.

0
ответ дан 27 November 2019 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: