小编sud*_*nym的帖子

内存泄漏在哪里?如何在python中进行多处理期间超时线程?

目前还不清楚如何Parallel在python中正确地删除joblib的工作者.其他人在这里,这里,这里这里有类似的问题.

在我的例子中,我正在使用一个由50 joblib名工人组成的 threading后端池.

并行调用(线程):

output = Parallel(n_jobs=50, backend  = 'threading')
    (delayed(get_output)(INPUT) 
        for INPUT in list)
Run Code Online (Sandbox Code Playgroud)

在这里,Parallel挂起没有错误,len(list) <= n_jobs但只有在n_jobs => -1.

为了克服这个问题,人们给予 说明如何创建一个超时装饰的Parallel功能(get_output(INPUT)使用)在上面的例子)multiprocessing:

主要功能(装饰):

@with_timeout(10)    # multiprocessing
def get_output(INPUT):     # threading
    output = do_stuff(INPUT)
    return output
Run Code Online (Sandbox Code Playgroud)

多处理装饰器:

def with_timeout(timeout):
    def decorator(decorated):
        @functools.wraps(decorated)
        def inner(*args, **kwargs):
            pool = multiprocessing.pool.ThreadPool(1)
            async_result = pool.apply_async(decorated, args, kwargs)
            try:
                return …
Run Code Online (Sandbox Code Playgroud)

screen-scraping web-scraping python-multithreading joblib python-multiprocessing

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

如何在熊猫中为HDF5添加新类别?

回答:看来这个数据类型不适合在hdf5store中添加任意字符串.

背景

我使用脚本生成单行结果,并以迭代方式将它们附加到磁盘上的文件中.为了加快速度,我决定使用HDF5容器而不是.csv.然后基准测试显示字符串降低了HDF5的速度.我被告知在将字符串转换为categoricaldtype 时可以减轻这种情况.

问题

我无法将带有新类别的分类行附加到HDF5.另外,我不知道如何控制cat.codesAFAIK可以以某种方式完成的dtypes .

可重复的例子:

1 - 使用分类数据创建大型数据框

import pandas as pd
import numpy as np
from pandas import HDFStore, DataFrame
import random, string

dummy_data = [''.join(random.sample(string.ascii_uppercase, 5)) for i in range(100000)]
df_big = pd.DataFrame(dummy_data, columns = ['Dummy_Data'])
df_big['Dummy_Data'] = df_big['Dummy_Data'].astype('category')
Run Code Online (Sandbox Code Playgroud)

2 - 创建一行以追加

df_small = pd.DataFrame(['New_category'], columns = ['Dummy_Data'])
df_small['Dummy_Data'] = df_small['Dummy_Data'].astype('category')
Run Code Online (Sandbox Code Playgroud)

3 - 保存(1)到HDF并尝试追加(2)

df_big.to_hdf('h5_file.h5', \
      'symbols_dict', format = "table", data_columns = True, append …
Run Code Online (Sandbox Code Playgroud)

python hdf5 categories pandas

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

如何为Matplotlib表中的特定单元格指定特定颜色?

在pylab_examples之后,我在matplotlib中创建了一个简单的2x5单元格表.

码:

# Prepare table
columns = ('A', 'B', 'C', 'D', 'E')
rows = ["A", "B"]
cell_text = [["1", "1","1","1","1"], ["2","2","2","2","2"]]
# Add a table at the bottom of the axes
ax[4].axis('tight')
ax[4].axis('off')
the_table = ax[4].table(cellText=cell_text,colLabels=columns,loc='center')
Run Code Online (Sandbox Code Playgroud)

现在,我想用单元格A1 color = "#56b5fd"和单元格A2 着色color = "#1ac3f5".所有其他细胞应保持白色.Matplotlib的table_demo.py以及示例仅向我展示如何应用具有取决于单元格中的值的预定义颜色的颜色映射.

如何为Matplotlib生成的表中的特定单元格指定特定颜色?

python colors matplotlib

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

Python-如何在 x 和 y 之间进行 if 语句?

我最近开始接触 Python,因为 C++ 很有趣,但 Python 似乎有点酷。只要输入在某个数字范围之间,我就想让 Python 做一些事情。

def main():
    grade = float(input("“What’s your grade?”\n:"))
    if grade >= 90:
        print("“You’re doing great!”")
    elif(78 >= grade <= 89):
        print("“You’re doing good!”")
    elif(77 >= grade > 65):
        print("You need some work")
    else:
        print("Contact your teacher")

main()
Run Code Online (Sandbox Code Playgroud)

当我在做 elif 语句时问题就出现了,我不能这样做,所以只要成绩在 65 到 89 之间,Python 只会打印“做得很好”的语句。你将如何处理数字范围?

python if-statement between numeric-ranges floating-point-comparison

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

python可以添加,运行和删除VBA宏,而无需中间保存步骤吗?

我有一个长期运行的python管道,它生成一个pandas数据帧.简而言之,我想:

  1. 在excel中显示pandas数据帧
  2. 添加并运行VBA宏
  3. 删除VBA宏并将(新格式化的)输出保存为 .xslx

挑战在于,如果没有中间的save-as xlsm-file步骤,我无法弄清楚如何做到这一点,这在将VBA宏添加到.xlsx文件时显然是必需的.由于这是低效的,我想摆脱这个中间步骤.

这是代码:

1.在excel中显示pandas数据框:

with pd.ExcelWriter('output.xlsx') as writer:
     df_results.to_excel(writer, index = False, sheet_name = "Sheet1")
     #...see below
Run Code Online (Sandbox Code Playgroud)

2A.添加宏并指定.xlsm-filename,以便writer可以保存宏

     #... see above
     writer.book.filename = 'output.xlsm'           # Add .xlsm filename
     writer.book.add_vba_project('VBA_script.bin')  # This adds my macro
     writer.save()                                  # How to get rid of this step?
Run Code Online (Sandbox Code Playgroud)

2B.运行宏

xl = win32com.client.Dispatch("Excel.Application")  # Set up excel
xl.Workbooks.Open(Filename = 'output.xlsm')         # Open .xlsm file from step 2A
xl.Application.Run("Module1.Main")                  # Run VBA_macro.bin
Run Code Online (Sandbox Code Playgroud)

3.删除宏并保存到.xlsx

wb = xl.ActiveWorkbook
xl.DisplayAlerts …
Run Code Online (Sandbox Code Playgroud)

python excel vba excel-vba pandas

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

如何在pandas中将groupby().transform()转换为value_counts()?

我正在处理一个df1带有物品价格的熊猫数据框.

  Item    Price  Minimum Most_Common_Price
0 Coffee  1      1       2
1 Coffee  2      1       2
2 Coffee  2      1       2
3 Tea     3      3       4
4 Tea     4      3       4
5 Tea     4      3       4
Run Code Online (Sandbox Code Playgroud)

我创建Minimum使用:

df1["Minimum"] = df1.groupby(["Item"])['Price'].transform(min)
Run Code Online (Sandbox Code Playgroud)

我该如何创作Most_Common_Price

df1["Minimum"] = df1.groupby(["Item"])['Price'].transform(value_counts()) # Doesn't work
Run Code Online (Sandbox Code Playgroud)

目前,我采用了多步骤方法:

for item in df1.Item.unique().tolist(): # Pseudocode
 df1 = df1[df1.Price == Item]           # Pseudocode
 df1.Price.value_counts().max()         # Pseudocode
Run Code Online (Sandbox Code Playgroud)

这太过分了.必须有一种更简单的方法,理想情况是一行

如何在pandas中将groupby().transform()转换为value_counts()?

python group-by dataframe pandas pandas-groupby

4
推荐指数
2
解决办法
3006
查看次数

Selenium .set_script_timeout(n) 有什么作用,它与 driver.set_page_load_timeout(n) 有何不同?

在python selenium的上下文中,我不太明白driver.set_page_load_timeout(n)VS的确切区别。driver.set_script_timeout(n). 两者似乎可以互换使用来设置超时以通过 加载 URL driver.get(URL),但有时也一起使用。

场景一

driver.set_page_load_timeout(5)
website = driver.get(URL)
results = do_magic(driver, URL)
Run Code Online (Sandbox Code Playgroud)

场景二

driver.set_script_timeout(5)
website = driver.get(URL)
results = do_magic(driver, URL)
Run Code Online (Sandbox Code Playgroud)

两种情况有何不同?哪些情况会在一种情况下触发超时而不是另一种情况?

python selenium webdriver pageloadtimeout setscripttimeout

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

如何将字符串添加到熊猫数据框列系列中的每个偶数行?

我是熊猫的新手。

我想向 Pandas 数据帧添加一个新列,df并将“开始”分配给每个奇数行,将“停止”分配给每个偶数行。

但是,当我这样做时df.iloc[1::2, :] = "Start",我会在每列中的“开始”字符串的每第二个位置插入一个新行。

我知道在这种情况下,pandas 不知道将“开始”字符串放在哪一列中。

但是,我无法弄清楚正确的语法。

python indexing loc pandas

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

如何(重新)在pandas数据帧中命名空列标题而不导出到csv

我有一个df1带有索引列和未命名的值系列的pandas数据帧.我想为未命名的系列指定一个名称.

到目前为止我知道的唯一方法是导出到df1.csv使用:

df1.to_csv("df1.csv", header = ["Signal"])

然后使用以下方法重新导入:

pd.read_csv("df1.csv", sep=",")

但是,这会花费时间和存储空间.如何在内存中这样做?

当我做 df2 = df1.rename(columns = {"" : "Signal"}, inplace = True)

我屈服:

AttributeError: "Series" object has no attribute "Signal".

python csv rename pandas

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

如何替换 pandas 数据框中给定列的第 n 行中的值?

首先,我从 .csv 文件创建一个 pandas 数据框:

df1 = pd.read_csv(infile1, sep=",", usecols=cols, header=0, names=["Timestamp","x"])
Run Code Online (Sandbox Code Playgroud)

其次,我print df1.head()这样做会产生:

       Timestamp      x
0  1491894899989  15424
1  1491894899984  15424
2  1491894899979  15488
3  1491894899974  15488
4  1491894899969  15488
Run Code Online (Sandbox Code Playgroud)

然后,做print int(df1.x.iloc[[0]].values)收益15424

现在,我想替换iloc[[0]]的值x

该行df1.x.iloc[[0]].values == 88并不能解决问题,因为print int(df1.x.iloc[[0]].values)仍然会产生15424而不是88.

如何替换 pandas 数据框中给定列的第 n 行中的值?

python pandas

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