小编JOH*_*OHN的帖子

Python Jupyter Notebook:指定单元格执行顺序

我有一个Jupyter笔记本.在单元格1中,我定义了许多函数,这些函数需要在其他事情之前运行.然后在下面的单元格中,我开始呈现结果.但是,当我转换为HTML时,这种布局很难看.读者必须滚动很长时间才能看到结果,他们可能根本不关心这些功能.但我必须按顺序放置代码,因为我需要这些功能.

所以我的问题是,在点击全部运行之后,有没有办法可以控制单元格的运行顺序?或者我有办法做以下事情.我将所有函数定义放在单元格20中,然后在单元格1中,我可以说告诉Jupyter类似"运行单元格20".

只是好奇这是否可行.谢谢.

python jupyter jupyter-notebook

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

python非阻塞写csv文件

我正在编写一些python代码来进行一些计算并将结果写入文件.这是我目前的代码:

for name, group in data.groupby('Date'):
    df = lot_of_numpy_calculations(group)

    with open('result.csv', 'a') as f:
        df.to_csv(f, header=False, index=False)
Run Code Online (Sandbox Code Playgroud)

有时计算和写入都需要.我在python中阅读了一篇关于async的文章,但我不知道如何实现它.有没有一种简单的方法来优化这个循环,以便它不会等到写完成并开始下一次迭代?

python python-multithreading python-asyncio

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

如何在 Airflow 中运行异步功能?

我正在编写一个气流任务来读取一个大的 csv 并将其保存到 postgresql 数据库。我发现这个 asyncpg 包有一个复制功能,运行速度比任何其他包都要快。但是,它是异步的,我不知道如何将其合并到 Airflow 中。这是一个示例代码:

from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
from pandas import DataFrame
import asyncpg

async def to_sql(dataframe, table_name, schema_name='public', timeout=None, truncate=False):
    connection = await asyncpg.connect(user='postgres', host='host.docker.internal', database='quantaxis', password='123456')
    result = await connection.copy_records_to_table(
        table_name,
        records=dataframe.values.tolist(),
        columns=shared_columns,
        schema_name=schema_name,
        timeout=timeout)
    await connection.close()
    return result


default_args = {
    'owner': 'Airflow',
    'depends_on_past': False,
    'start_date': datetime(2020, 1, 1),
    'retries': 1,
    'retry_delay': timedelta(minutes=1),
}

dag = DAG('pythonexp2123', default_args=default_args, schedule_interval=timedelta(days=1))

async def save_file_to_database(ds):
    df …
Run Code Online (Sandbox Code Playgroud)

python async-await airflow

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

为什么在 Pandas 中使用 apply 时会出现额外的索引

当我apply在 Pandas 中使用用户定义的函数时,看起来 python 正在创建一个附加数组。我怎样才能摆脱它呢?这是我的代码:

def fnc(group):
    x = group.C.values
    out = x[np.where(x < 0)]
    return pd.DataFrame(out)

data = pd.DataFrame({'A':np.random.randint(1, 3, 10),
                     'B':3,
                     'C':np.random.normal(0, 1, 10)})

data.groupby(by=['A', 'B']).apply(fnc).reset_index()
Run Code Online (Sandbox Code Playgroud)

创建了这个奇怪的Level_2索引。有没有办法避免在运行我的函数时创建它?

    A   B   level_2   0
0   1   3   0        -1.054134802
1   1   3   1        -0.691996447
2   2   3   0        -1.068693768
3   2   3   1        -0.080342046
4   2   3   2        -0.181869799
Run Code Online (Sandbox Code Playgroud)

python apply pandas

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

有没有办法提高大文件解析日期的速度?

我正在读取一个大约有 1B 行的大 csv 文件。我在解析日期时遇到了问题。Python 的处理速度很慢。

文件中的一行如下所示, '20170427,20:52:01.510,ABC,USD/MXN,1,OFFER,19.04274,9000000,9@15@8653948257753368229,0.0\n'

如果我只看数据的话,需要1分钟。

t0 = datetime.datetime.now()
i = 0
with open(r"QuoteData.txt") as file:
    for line in file:
        i+=1
print(i)
t1 = datetime.datetime.now() - t0
print(t1)

129908976
0:01:09.871744
Run Code Online (Sandbox Code Playgroud)

但如果我尝试解析日期时间,则需要 8 分钟。

t0 = datetime.datetime.now()
i = 0
with open(r"D:\FxQuotes\ticks.log.20170427.txt") as file:
    for line in file:
        strings = line.split(",")

        datetime.datetime(
            int(strings[0][0:4]), # %Y
            int(strings[0][4:6]), # %m
            int(strings[0][6:8]), # %d
            int(strings[1][0:2]), # %H
            int(strings[1][3:5]), # %M
            int(strings[1][6:8]), # %s
            int(strings[1][9:]), # %f
        )    

        i+=1
print(i)
t1 = …
Run Code Online (Sandbox Code Playgroud)

python performance cython

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

大熊猫四舍五入,这是一个错误吗?

这是一个错误吗?当我在4位小数舍入时,它实际上返回不同的结果.

import pandas as pd
pd.set_option('precision', 10)

pd.DataFrame([[1.446450001],[1.44645]]).round(4)
Run Code Online (Sandbox Code Playgroud)

结果

    0
0   1.4465
1   1.4464
Run Code Online (Sandbox Code Playgroud)

python rounding pandas

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

在Jupyter cdef中运行Cython

我正在寻找合并一些cython来加速我的代码.我遇到了在Jupyter中运行cython代码的问题.

单元格1:

%%cython
cdef fuc():
    cdef int a = 0
    for i in range(10):
        a += i
        print(a)
Run Code Online (Sandbox Code Playgroud)

细胞2:

fuc()
Run Code Online (Sandbox Code Playgroud)

错误:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-48-10789e9d47b8> in <module>()
----> 1 fuc()

NameError: name 'fuc' is not defined
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,它工作正常.

%%cython
def fuc():
    cdef int a = 0
    for i in range(10):
        a += i
        print(a)
Run Code Online (Sandbox Code Playgroud)

看起来cdef在Jupyter中的使用方式不同,我怎么能在Jupyter笔记本中使用cdef?

python cython python-3.x jupyter-notebook

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

Dart 中的插入符号有什么作用

我正在查看一些 Flutter 项目,我注意到以下代码:

  @override
  int get hashCode => todos.hashCode ^ isLoading.hashCode;
Run Code Online (Sandbox Code Playgroud)

这个^符号在这里做什么?这行代码是在Flutter项目的AppState中找到的。这是用来比较之前和之后的State吗?

dart flutter

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

python heapq源代码_siftdown

PYTHON:

def _siftdown(heap, startpos, pos):
    newitem = heap[pos]
    # Follow the path to the root, moving parents down until finding a place
    # newitem fits.
    while pos> startpos:
        parentpos = (pos - 1)>> 1
        parent = heap[parentpos]
        if cmp_lt(newitem, parent):
            heap[pos] = parent
            pos = parentpos
            continue
        break
    heap[pos] = newitem
Run Code Online (Sandbox Code Playgroud)

我刚刚查看了 heapq 源代码,谁能解释一下第 6 行的作用?什么是 >> 运算符以及它是如何工作的?

python

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

熊猫到SQL Seriver

我得到以下代码。问题是我可以使用panda.read_sql读取数据,但不能使用DataFrame.to_sql()函数。

%matplotlib inline
import pandas as pd
import pyodbc
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt

pd.set_option('display.max_rows', 50)
pd.set_option('display.max_columns', 15)
pd.set_option('precision', 4)

conn = pyodbc.connect(r"Driver={SQL Server};Server=dev;Database=test1")

data = pd.read_sql_query(
    """
SELECT *
FROM   sys.tables
    """
    , con = conn)

print data
data.to_sql('test', con = conn)
Run Code Online (Sandbox Code Playgroud)

错误如下:

在SQL'SELECT name FROM sqlite_master WHERE type ='table'AND name = ?;'上执行失败:('42S02',“ [42S02] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效的对象名'sqlite_master' 。(208)(SQLExecDirectW); [42000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]声明无法准备。(8180)“)

有办法解决吗?

python sql sql-server pandas

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