小编Dav*_*arx的帖子

使用openpyxl为范围内的所有单元格应用边框

我有一个脚本,它接受一个pandas数据帧并将其分成几百个块并将每个块保存为单独的excel文件.每个块将具有相同数量的列,但行数会有所不同.我已经想出如何使用openpyxl将所有其他必要的格式应用于这些文件,但我还没有确定应用边框的最快方法.此外,我认为我只是没有正确应用边框,因为下面的代码(我怀疑不应该单独遍历每个单元格)不适用任何边框.

from openpyxl.style import Border

wb = load_workbook(filename = _fname)
ws = wb.worksheets[0]  
for _row in ws.range('A1:L'+str(ws.get_highest_row() ) ):
    for _cell in _row:
            _cell.style.borders.left.border_style = Border.BORDER_THIN
            _cell.style.borders.right.border_style = Border.BORDER_THIN
            _cell.style.borders.top.border_style = Border.BORDER_THIN
            _cell.style.borders.bottom.border_style = Border.BORDER_THIN
wb.save(_fname)
Run Code Online (Sandbox Code Playgroud)

所以这段代码可以工作,但它不会应用我期望的边框(excel中的默认边框),它需要比我更喜欢的步骤.我的期望是我应该能够做到这样的事情:

from openpyxl.style import Border

wb = load_workbook(filename = _fname)
ws = wb.worksheets[0]

_range = ws.some_range_func('A1:L'+str(ws.get_highest_row() ) ):
    _range.style.borders.all_borders = Borders.BORDER_THIN
Run Code Online (Sandbox Code Playgroud)

这个功能是否存在?如果没有,有人可以这么好,至少解释如何应用默认边框样式而不是这个稍厚的边框?Border.BORDER_THICK,Border.BORDER_MEDIUM,Border.BORDER_THIN或Border.BORDER_HAIR似乎都没有.

谢谢!

python excel openpyxl

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

从使用绑定变量的数据库查询创建pandas数据帧

我正在使用Oracle数据库.我可以这么做:

    import pandas as pd
    import pandas.io.sql as psql
    import cx_Oracle as odb
    conn = odb.connect(_user +'/'+ _pass +'@'+ _dbenv)

    sqlStr = "SELECT * FROM customers"
    df = psql.frame_query(sqlStr, conn)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何处理绑定变量,如下所示:

    sqlStr = """SELECT * FROM customers 
                WHERE id BETWEEN :v1 AND :v2
             """
Run Code Online (Sandbox Code Playgroud)

我尝试过这些变化:

   params  = (1234, 5678)
   params2 = {"v1":1234, "v2":5678}

   df = psql.frame_query((sqlStr,params), conn)
   df = psql.frame_query((sqlStr,params2), conn)
   df = psql.frame_query(sqlStr,params, conn)
   df = psql.frame_query(sqlStr,params2, conn)
Run Code Online (Sandbox Code Playgroud)

以下作品:

   curs = conn.cursor()
   curs.execute(sqlStr, params)
   df = pd.DataFrame(curs.fetchall())
   df.columns = …
Run Code Online (Sandbox Code Playgroud)

python sql database oracle pandas

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

将矩阵的每一行乘以r中的向量的好方法

我知道这是一个非常基本的问题,抱歉.

我想用矩阵乘以矩阵的每一行.所以我有:

mat=matrix(1,2,4)
vec=c(1,2,3,4)

#works but ugly:
new.mat=mat
for(i in 1:nrow(mat)){
  new.mat[i,]=mat[i,]*vec
}
Run Code Online (Sandbox Code Playgroud)

我以为我找到了'应用'的答案,但我无法以同样的方式工作.

r

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

使用Flask Web应用程序监视实时数据流

这基于/sf/answers/937224081/发布的答案

我想监视数据流并将其推送到类似于上述答案的前端,但是一旦应用启动,该流就开始生成/监视数据,并且客户端始终会看到数据流的当前状态。数据流(无论它们是否正在从服务器请求数据,它都会一直运行)。

我很确定我需要通过线程将数据流与前端分开,但是我对线程/异步编程不是很熟练,并且认为我做错了。也许不是threading我需要使用多重处理?这大致就是我想做的事情(根据上面链接的答案进行了修改):

app.py

#!/usr/bin/env python
from __future__ import division
import itertools
import time
from flask import Flask, Response, redirect, request, url_for
from random import gauss
import threading

app = Flask(__name__)

# Generate streaming data and calculate statistics from it
class MyStreamMonitor(object):
    def __init__(self):
        self.sum   = 0
        self.count = 0
    @property
    def mu(self):
        try:
            outv = self.sum/self.count
        except:
            outv = 0
        return outv
    def generate_values(self):
        while True:
            time.sleep(.1)  # an artificial delay
            yield gauss(0,1)
    def monitor(self, …
Run Code Online (Sandbox Code Playgroud)

python multithreading network-programming stream flask

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

花式索引沿多个轴的numpy数组的最佳实践

我正在尝试优化算法以减少内存使用量,并且我已经将此特定操作确定为一个痛点.

我有一个对称矩阵,沿着行的索引数组,以及沿着列的另一个索引数组(这只是我没有在行索引中选择的所有值).我觉得我应该能够同时传入两个索引,但我发现自己被迫沿着一个轴选择然后另一个轴,这导致一些内存问题,因为我实际上并不需要副本返回的数组,只是我正在计算的统计数据.这是我想要做的:

from scipy.spatial.distance import pdist, squareform
from sklearn import datasets
import numpy as np

iris = datasets.load_iris().data

dx = pdist(iris)
mat = squareform(dx)

outliers = [41,62,106,108,109,134,135]
inliers = np.setdiff1d( range(iris.shape[0]), outliers)

# What I want to be able to do:
scores = mat[inliers, outliers].min(axis=0)
Run Code Online (Sandbox Code Playgroud)

以下是我实际做的工作:

# What I'm being forced to do:
s1 = mat[:,outliers]
scores = s1[inliers,:].min(axis=0)
Run Code Online (Sandbox Code Playgroud)

因为我喜欢索引,所以s1是一个新数组而不是视图.我只需要这个数组用于一个操作,所以如果我可以消除在这里返回一个副本或至少使新数组变小(即通过尊重第二个花哨的索引选择,而我正在做第一个而不是两个独立的花式索引操作)这将是更可取的.

python arrays indexing numpy

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

透明的Networx边缘标签

如何在NetworkX图形中设置透明边缘标签?目前,每个标签都有白色背景,可切割我的边缘并与其他标签重叠

nx.draw(v29graph,
        nx.get_node_attributes(v29graph,'pos'),
        edge_labels=labels2
        )

nx.draw_networkx_edge_labels(v29graph,
                             pos=nx.get_node_attributes(v29graph,'pos'),
                             edge_labels=labels2
                             )
Run Code Online (Sandbox Code Playgroud)

python networkx

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

将多个CSV转换为xls或xlsx并对其应用格式

我有一个很大的excel文件,该文件用于汇总对多个客户端的问题的跟踪,我需要根据客户端将其分成较小的文件。

到目前为止,这是我得到的:我构建了一个python脚本,将该文件分为适当的客户端特定文件,并将正确的标头行应用于所有这些文件,但它会生成难看的CSV。我的老板想应用一些格式,所以我需要做的是(对于目录中的所有CSV):

  1. 将每个文件从CSV转换为.xls(或.xlsx),以便保存格式

  2. 自动调整列宽

  3. 将第一行设为粗体(并可能在行中应用颜色)

到目前为止,我猜测我可能可以使用pyWin32pyExcelerator做到这一点,但是考虑到我要进行的最小更改是将其作为VB脚本或宏之类的方法可能会更容易,但是我没有真的不知道那些工具。

python excel vba batch-file excel-vba

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