数据框列表或字典的 Pandasql 查询
Pandasql query of a list or dict of dataframes
给定一组文件 - 每个文件都被读入不同的 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]
显示了我 喜欢 做的事情 - 但不是有效的语法。关于如何以 pandasql
可以支持的方式构建此类问题的任何建议?
你可以告诉 pandasql table names/aliases 的列表,而不是仅仅传递 locals()
,根据 PandasSQL.__call__
的文档字符串(找不到在线版本文档):
:param env: Variables environment - a dict mapping table names to pandas dataframes.
请注意,您必须将要查询的 所有 table 放在那里。
这是一个小例子,使用 PandasSQL
class 而不是文档字符串中推荐的 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))
给定一组文件 - 每个文件都被读入不同的 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]
显示了我 喜欢 做的事情 - 但不是有效的语法。关于如何以 pandasql
可以支持的方式构建此类问题的任何建议?
你可以告诉 pandasql table names/aliases 的列表,而不是仅仅传递 locals()
,根据 PandasSQL.__call__
的文档字符串(找不到在线版本文档):
:param env: Variables environment - a dict mapping table names to pandas dataframes.
请注意,您必须将要查询的 所有 table 放在那里。
这是一个小例子,使用 PandasSQL
class 而不是文档字符串中推荐的 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))