我有一个Jupyter笔记本.在单元格1中,我定义了许多函数,这些函数需要在其他事情之前运行.然后在下面的单元格中,我开始呈现结果.但是,当我转换为HTML时,这种布局很难看.读者必须滚动很长时间才能看到结果,他们可能根本不关心这些功能.但我必须按顺序放置代码,因为我需要这些功能.
所以我的问题是,在点击全部运行之后,有没有办法可以控制单元格的运行顺序?或者我有办法做以下事情.我将所有函数定义放在单元格20中,然后在单元格1中,我可以说告诉Jupyter类似"运行单元格20".
只是好奇这是否可行.谢谢.
我正在编写一些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的文章,但我不知道如何实现它.有没有一种简单的方法来优化这个循环,以便它不会等到写完成并开始下一次迭代?
我正在编写一个气流任务来读取一个大的 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) 当我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) 我正在读取一个大约有 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) 这是一个错误吗?当我在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) 我正在寻找合并一些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?
我正在查看一些 Flutter 项目,我注意到以下代码:
@override
int get hashCode => todos.hashCode ^ isLoading.hashCode;
Run Code Online (Sandbox Code Playgroud)
这个^符号在这里做什么?这行代码是在Flutter项目的AppState中找到的。这是用来比较之前和之后的State吗?
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 行的作用?什么是 >> 运算符以及它是如何工作的?
我得到以下代码。问题是我可以使用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 ×9
pandas ×3
cython ×2
airflow ×1
apply ×1
async-await ×1
dart ×1
flutter ×1
jupyter ×1
performance ×1
python-3.x ×1
rounding ×1
sql ×1
sql-server ×1