在Python中是否有一个模块可以为R执行类似"sqldf"的操作?

gst*_*002 8 python sql r dataframe

列表理解非常好.但某种"......加入......"会非常有用.谢谢.所以举个例子.我有一个集合A = {1,0},一个列表B = [[1,1],[2,3]].我想找到B中的所有行,其中第二个colomu是A中的值之一.或者更常见的是,我有2个CSV文件.我想找出两个文件中某些冒号的值匹配的所有行.就像某种"加入"两个文件一样.其中一个文件是GB大小. sqldf是"R数据帧上的SQL选择".

Gre*_*reg 7

您可以使用pandasql,它允许SQL样式查询pandas DataFrames.它与sqldf非常相似.

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

(完全免责声明,我写了)

编辑:博客文章记录了这里找到的一些功能:http: //blog.yhathq.com/posts/pandasql-sql-for-pandas-dataframes.html


mac*_*mac 4

我不知道有一个库在做你所要求的事情(但我只浏览了sqldf文档),但是你所要求的一切都不需要库,它们是Python中的单行代码(你当然可以抽象功能创建一个函数而不是简单的列表理解......)

集合A={1,0},列表B=[[1,1],[2,3]]。我想找到 B 中第二列是 A 中的值之一的所有行。

>>> a = set([1, 0])
>>> b = [[1,1],[2,3]]
>>> [l for l in b if l[1] in a]
[[1, 1]]
Run Code Online (Sandbox Code Playgroud)

我有 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])]
Run Code Online (Sandbox Code Playgroud)

编辑:如果内存使用是一个问题,您应该使用生成器而不是列表。例如:

>>> zip(f1, f2)
[([1, 2, 3], [0, 2, 8]), ([4, 5, 6], [7, 7, 7])]
Run Code Online (Sandbox Code Playgroud)

但使用生成器:

>>> 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])
Run Code Online (Sandbox Code Playgroud)

对于数据源:

>>> [line for line in f1]
[[1, 2, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)

将生成器翻译为:

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