我有pandas数据帧,我想在它上执行查询函数与isnull()或不是isnull()条件,如:
In [67]: df_data = pd.DataFrame({'a':[1,20,None,40,50]})
In [68]: df_data
Out[68]: a
0 1.0
1 20.0
2 NaN
3 40.0
4 50.0
Run Code Online (Sandbox Code Playgroud)
如果我使用此命令:
df_data.query('a isnull', engine='python')
Run Code Online (Sandbox Code Playgroud)
或者这个命令:
df_data.query('a isnull()', engine='python')
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
In [75]: df_data.query('a isnull', engine='python')
File "<unknown>", line 1 a isnull
SyntaxError: invalid syntax
In [76]: df_data.query('a isnull()', engine='python')
File "<unknown>", line 1 a isnull ()
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
谢谢.
我有一个python函数,它获取一个pandas数据帧并通过DataFrame的"查询"函数对其执行一个condiotion.
如此简单的条件,如=,!=和所有它没关系.
但是我希望它能够用"喜欢"来执行条件.那可能吗?
另外,我想检查一些列是否大于"现在"......
我怎么能这样做?
我有 2 个熊猫数据框 - df_current_data、df_new_data。
我的目标是应用合并(不是 Pandas 合并函数,像“更新\插入”这样的合并)。匹配检查是通过键列进行的。
我的结果需要由 3 个可选的行类型构建。
df_current_data 中存在但 df_new_data 中不存在的行 - 将“按原样”插入结果。
df_new_data 中存在但 df_current_data 中不存在的行 - 将“按原样”插入结果。
存在于 df_new_data 和 df_current_data 中的行 - 结果需要从 df_new_data 中获取行。
这是一个经典的合并更新插入操作。
例子:
# rows 0,1 are in current and not in new (check by index1 and index2)
# row 2 is common
In [41]: df_current_source
Out[41]: A index1 index2
0 1 1 4
1 2 2 5
2 3 3 6
# rows 0,2 are in new and …Run Code Online (Sandbox Code Playgroud) 我有一个airflow计划每 3 分钟运行一次的任务。
有时任务的持续时间超过 3 分钟,并且下一个计划开始(或排队),尽管它已经在运行。
有没有一种方法可以定义 dag,如果任务已经在运行,甚至不对其进行排队?
# airflow related
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators import MsSqlOperator
# other packages
from datetime import datetime
from datetime import timedelta
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2020, 7, 22, 15,00,00),
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(seconds=5)
}
dag = DAG(
dag_id='sales',
description='Run sales',
schedule_interval = '*/3 4,5,6,7,8,9,10,11,12,13,14,15,16,17 * * 0-5',
default_args=default_args,
catchup = False)
job1 = BashOperator(
task_id='sales',
bash_command='python2 /home/manager/ETL/sales.py', …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建带有分区的简单表。
这是我的命令:
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
) PARTITION BY RANGE (logdate);
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
SQL 错误 [42601]:错误:“PARTITION”处或附近的语法错误
无法理解是问题..
我正在使用 PostgreSQL 9.6.3
postgresql create-table database-partitioning postgresql-9.6
我的 Postgres 版本是 9.6
我今天尝试使用以下命令从数据库中删除索引:
drop index index_name;
Run Code Online (Sandbox Code Playgroud)
它导致了很多锁 - 整个应用程序被卡住,直到我杀死了 drop 的所有会话(为什么它被分成几个会话?)。
当我检查锁时,我发现几乎所有被阻止的会话都执行该查询:
SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM
pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = <index_able_name>::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum;
Run Code Online (Sandbox Code Playgroud)
这会阻止系统操作是否有意义?
所以我决定删除带有并发选项的索引以防止锁定。
drop index concurrently index_name;
Run Code Online (Sandbox Code Playgroud)
我现在从 PGAdmin 执行它(因为您无法从 noraml 事务运行它)。
跑了20多分钟,还没完。索引大小为 20MB+-。
当我检查数据库的锁时,我发现该表上有一个选择查询,这会阻止删除命令。
但是,当我进行此选择并在另一个会话中执行时,速度很快(2-3)秒。
那么为什么它会阻止我的下降呢?还有其他选择吗?也许要禁用索引?
是否有一个类似SQLERRM或SQLCODE包含引发错误的语句的变量?
例:
/*
if some error raised from this code
and I want to know which statement cause the failure..
I wish to use some oracle varaible to know it
*/
begin
select * from t1;
select * from t2;
exception when others
dbms_output.put_line(sqlerrm || ' raised from this statement:' || <some_variable>;
end;
-- excepted result: no data found raised from this statement: select * from t2
Run Code Online (Sandbox Code Playgroud) 我运行此查询来检查我的数据库中是否有一些未使用的索引。
select
t.tablename AS "relation",
indexname,
c.reltuples AS num_rows,
pg_relation_size(quote_ident(t.tablename)::text) AS table_size,
pg_relation_size(quote_ident(indexrelname)::text) AS index_size,
idx_scan AS number_of_scans,
idx_tup_read AS tuples_read,
idx_tup_fetch AS tuples_fetched
FROM pg_tables t
LEFT OUTER JOIN pg_class c ON t.tablename=c.relname
LEFT OUTER JOIN
( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, psai.idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x
JOIN pg_class c ON c.oid = x.indrelid
JOIN pg_class ipg ON ipg.oid = x.indexrelid
JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid )
AS foo …Run Code Online (Sandbox Code Playgroud) 条件None == None是真还是假?
我有 2 个熊猫数据框:
import pandas as pd
df1 = pd.DataFrame({'id':[1,2,3,4,5], 'value':[None,20,None,40,50]})
df2 = pd.DataFrame({'index':[1,2,3], 'value':[None,20,None]})
In [42]: df1
Out[42]: id value
0 1 NaN
1 2 20.0
2 3 NaN
3 4 40.0
4 5 50.0
In [43]: df2
Out[43]: index value
0 1 NaN
1 2 20.0
2 3 NaN
Run Code Online (Sandbox Code Playgroud)
当我执行合并操作时,它看起来None == None是 True:
In [37]: df3 = df1.merge(df2, on='value', how='inner')
In [38]: df3
Out[38]: id value index
0 1 NaN 1 …Run Code Online (Sandbox Code Playgroud)