Есть ли в Python модуль, который делает что-то вроде «sqldf» для R?

Перечисление понятий очень хорошее. Но что-то вроде «… Join …» было бы очень полезно. Благодарю. Так, например. У меня есть Set A = {1,0}, список B = [[1,1], [2,3]]. Я хотел бы найти все строки в B, где второй colomu является одним из значений в A. Или что-то более общее, у меня есть 2 CSV-файла. Я хочу узнать все строки, в которых совпадают значения некоторых символов из двух файлов. Также как «объединение» двух файлов. Один из файлов – размер GB. sqldf является «SQL select on R data frames».

Вы можете использовать pandasql, который позволяет запросить стиль SQL для pandas DataFrames. Он очень похож на sqldf.

https://github.com/yhat/pandasql/

(полная оговорка, я это написал)

EDIT: запись в блоге, описывающая некоторые функции, найденные здесь: http://blog.yhathq.com/posts/pandasql-sql-for-pandas-dataframes.html

Я не знаю о том, что библиотека делает то, что вы просите (но я только взглянул на документацию sqldf ), однако ничто из того, что вы просили, действительно требует библиотеки, они являются однострочными в python (и вы могли бы, конечно, абстрактно создать функциональность функция, а не простое понимание списка …)

Установите A = {1,0}, список B = [[1,1], [2,3]]. Я хотел бы найти все строки в B, где второй colomu является одним из значений в A.

 >>> a = set([1, 0]) >>> b = [[1,1],[2,3]] >>> [l for l in b if l[1] in a] [[1, 1]] 

У меня есть 2 файла CSV. Я хочу узнать все строки, в которых совпадают значения некоторых символов из двух файлов.

 >>> f1 = [[1, 2, 3], [4, 5, 6]] >>> f2 = [[0, 2, 8], [7, 7, 7]] >>> [tuple_ for tuple_ in zip(f1, f2) if tuple_[0][1] == tuple_[1][1]] [([1, 2, 3], [0, 2, 8])] 

EDIT: Если использование памяти является проблемой, вы должны использовать генераторы вместо списков. Например:

 >>> zip(f1, f2) [([1, 2, 3], [0, 2, 8]), ([4, 5, 6], [7, 7, 7])] 

но с использованием генераторов:

 >>> import itertools as it >>> gen = it.izip(f1, f2) >>> gen <itertools.izip object at 0x1f24ab8> >>> next(gen) ([1, 2, 3], [0, 2, 8]) >>> next(gen) ([4, 5, 6], [7, 7, 7]) 

И для источника данных:

 >>> [line for line in f1] [[1, 2, 3], [4, 5, 6]] 

перевести в качестве генератора как:

 >>> gen = (line for line in f1) >>> gen <generator object <genexpr> at 0x1f159b0> >>> next(gen) [1, 2, 3] >>> next(gen) [4, 5, 6] 

Прежде чем вы сможете выполнять функциональные возможности sqldf, вам понадобятся функциональные возможности 'df', то есть dataframes. Python имеет приятную версию: pandas:

http://pandas.sourceforge.net/

Возможно, раздел о присоединении и слиянии поможет:

http://pandas.sourceforge.net/merging.html

Я рекомендую вам начать с чего-то меньшего, чем ваши гигабайтные файлы!