小编use*_*057的帖子

pandas使用查询函数检查列是否为null

我有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 null dataframe pandas

11
推荐指数
1
解决办法
5455
查看次数

Pandas查询功能与like和date

我有一个python函数,它获取一个pandas数据帧并通过DataFrame的"查询"函数对其执行一个condiotion.

如此简单的条件,如=,!=和所有它没关系.

但是我希望它能够用"喜欢"来执行条件.那可能吗?

另外,我想检查一些列是否大于"现在"......

我怎么能这样做?

python regex pandas

5
推荐指数
2
解决办法
1900
查看次数

合并(更新\插入)pandas 数据帧的更好方法

我有 2 个熊猫数据框 - df_current_data、df_new_data。

我的目标是应用合并(不是 Pandas 合并函数,像“更新\插入”这样的合并)。匹配检查是通过键列进行的。

我的结果需要由 3 个可选的行类型构建。

  1. df_current_data 中存在但 df_new_data 中不存在的行 - 将“按原样”插入结果。

  2. df_new_data 中存在但 df_current_data 中不存在的行 - 将“按原样”插入结果。

  3. 存在于 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)

python merge dataframe pandas

5
推荐指数
1
解决办法
7199
查看次数

如何避免任务已经运行时运行

我有一个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)

airflow

5
推荐指数
0
解决办法
939
查看次数

为什么不能创建分区表

我正在尝试创建带有分区的简单表。

这是我的命令:

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

4
推荐指数
1
解决办法
5630
查看次数

删除索引锁

我的 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)秒。

那么为什么它会阻止我的下降呢?还有其他选择吗?也许要禁用索引?

postgresql indexing locking

4
推荐指数
1
解决办法
7568
查看次数

哪个命令引发了异常?

是否有一个类似SQLERRMSQLCODE包含引发错误的语句的变量?

例:

/* 
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)

oracle plsql exception

2
推荐指数
1
解决办法
54
查看次数

删除未使用的索引

我运行此查询来检查我的数据库中是否有一些未使用的索引。

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)

postgresql indexing database-performance

1
推荐指数
1
解决办法
1820
查看次数

python None == None 是真还是假?

条件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)

python null pandas

-3
推荐指数
1
解决办法
1069
查看次数