1

给定一组文件——每个文件都被读入不同的文件——查询dataframe如何pandasql引用它们?

在以下代码段中,我们有 a listof dataframes: 但同样的问题也适用于 a 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]正在显示我想做事情- 但不是有效的语法。关于如何以可以支持的方式构建此类问题的任何建议pandasql

4

1 回答 1

3

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

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

请注意,您必须将所有要查询的表放在那里。

这是一个小例子,使用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))
于 2018-11-17T19:16:54.503 回答