给出一组文件-每个文件都读入一个不同的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]
支持的方式来构造此类问题的任何建议?
答案 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))