dataframe.query()
上的文档非常简洁http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.query.html。我也无法通过网络搜索找到投影的例子。
所以我尝试简单地提供列名:这给出了语法错误。同样,键入select
,然后键入列名称。那么..怎么做?
答案 0 :(得分:3)
在玩了一段时间并阅读DataFrame.query
eval
之后,我无法找到方法。
如果不是不可能的话,显然它至少是强烈劝阻的。当这个问题出现在github上时,多产的Pandas dev / maintainer jreback the source code。
更新:
javadba指出df.eval('A')
的返回值不是数据帧。例如,为了充实jreback的例子......
df.eval(['A', 'B'])
返回Pandas系列,但
iloc
没有在DataFrame返回,它返回一个列表(Pandas系列)。
因此,最终保持过滤行和列的灵活性的最佳方法是使用loc
/ df.loc[0:4, ['A', 'C']]
,例如。
A C
0 -0.497163 -0.046484
1 1.331614 0.741711
2 1.046903 -2.511548
3 0.314644 -0.526187
4 -0.061883 -0.615978
输出
public ProjectContext() : base(new JetConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Test-Project.sep'; providerName=JetEntityFrameworkProvider; Password=SEEME;"), true)
{
}
答案 1 :(得分:3)
import pandas as pd
import numpy as np
np.random.seed(123)
dates = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D'])
更像是SQL语句中的 where子句,而不是 select part 。
df['A'] or df.loc[:,'A']
要选择一列或多列,您可以使用以下内容:
df[['A','B']] or df.loc[:,['A','B']]
或
.query
要使用df.query('A > B')
方法,您需要执行类似
A B C D
2000-01-03 1.265936 -0.866740 -0.678886 -0.094709
2000-01-04 1.491390 -0.638902 -0.443982 -0.434351
2000-01-05 2.205930 2.186786 1.004054 0.386186
2000-01-08 -0.140069 -0.861755 -0.255619 -2.798589
将返回A列中的值大于b列中值的所有行。
df[df['A'] > df['B']]
在我看来,使用
选择布尔索引更具可读性def t():
global i
# next code
答案 2 :(得分:2)
https://pypi.python.org/pypi/pandasql/0.1.0
以下是来自以下博客http://blog.yhat.com/posts/pandasql-sql-for-pandas-dataframes.html的示例。输入为两个DataFrame
s meat
和births
:此方法提供projections
,filtering
,aggregation
和sorting
期待来自sql。
pysqldf = lambda q: sqldf(q, globals())
q = """
SELECT
m.date
, m.beef
, b.births
FROM
meat m
LEFT JOIN
births b
ON m.date = b.date
WHERE
m.date > '1974-12-31';
"""
meat = load_meat()
births = load_births()
df = pysqldf(q)
根据需要输出大熊猫DataFrame
。
它对我的特定用例(评估我们的犯罪)非常有用
odf = pysqldf("select %s from df where sweapons > 10 order by sweapons desc limit 10" %scols)
p('odf\n', odf)
odf
: SMURDER SRAPE SROBBERY SAGASSLT SOTHASLT SVANDLSM SWEAPONS
0 0 0 0 1 1 10 54
1 0 0 0 0 1 0 52
2 0 0 0 0 1 0 46
3 0 0 0 0 1 0 43
4 0 0 0 0 1 0 33
5 1 0 2 16 28 4 32
6 0 0 0 7 17 4 30
7 0 0 0 0 1 0 29
8 0 0 0 7 16 3 29
9 0 0 0 1 0 5 28
更新我现在用pandasql
做了很多事情:计算字段,限制,别名,级联数据帧......它只是所以生产力。
答案 3 :(得分:2)
怎么样
df_new = df.query('col1==1 & col2=="x" ')[['col1', 'col3']]
将对col1等于1且col2等于“ X”的行进行过滤,并仅返回第1列和第3列。
,但您需要过滤行,否则行不通。
对于过滤列,最好只使用.loc
或.iloc
答案 4 :(得分:1)
math.
):我的目标:
我希望查询结果中包含 lat 和 lon 列。
我的表详细信息:
get
<块引用>
Index(['name', 'city_id', 'lat', 'lon', 'CountryName', 'ContinentName'], dtype='object')
df_city.columns
<块引用>
# All columns
city_continent = df_city.get(df_city['ContinentName']=='Oceania')
# Only lat and lon
city_continent[['lat', 'lon']]