Pandasql查询数据帧列表或字典

时间:2018-11-17 18:25:30

标签: python pandas pandasql

给出一组文件-每个文件都读入一个不同的ID_A col_A ID_A_FK col_B 1 aaa 1 a1 1 aaa 1 a2 2 bbb NULL NULL 3 ccc 3 c1 3 ccc 3 c2 3 ccc 3 c3 4 ddd NULL NULL 5 eee NULL NULL -dataframe查询如何引用它们?

在以下代码段中,我们有一个pandasql的一个list:但同样的问题也将适用于一个dataframes

dict

import pandas as pd from pandasql import sqldf # Read in a set of 10 files each containing columns `id` and `estimate` dfs = [pd.read_csv('file%d.csv' %d) for d in range(1,10+1)] sql_res = sqldf("select d2.estimate - d1.estimate \ from dfs[1] d1 join dfs[2] d2 on d2.id = d1.id", locals()) dfs[1]展示了我想 要做的事情-但这不是有效的语法。关于如何以dfs[2]支持的方式来构造此类问题的任何建议?

1 个答案:

答案 0 :(得分:1)

根据locals()的文档字符串,您可以告诉pandasql表名称/别名的列表,而不只是传递PandasSQL.__call__(找不到在线文档版本):

:param env: Variables environment - a dict mapping table names to pandas dataframes.

请注意,尽管如此,您必须将要查询的 all 表放在此处。

这是一个小例子,使用PandasSQL类而不是文档字符串中建议的sqldf

import pandasql

sql = pandasql.PandaSQL()


data_frames = [
    pd.DataFrame({'a': [1,2,3]}),
    pd.DataFrame({'b': [1,4,5]})
]

# create aliases for your dataframes
env = {'t%d' % (i + 1): df for i, df in enumerate(data_frames)}

# tell pandasql to use the aliases
print(sql('select t1.* from t1 join t2 on t1.a = t2.b', env=env))