小编Rya*_*yan的帖子

Pandas条形图 - 按列指定条形颜色

有没有一种简单的方法来使用Pandas DataFrame.plot(kind='bar')方法按列名指定条形颜色?

我有一个脚本,可以从目录中的几个不同数据文件生成多个DataFrame.例如,它做这样的事情:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pds

data_files = ['a', 'b', 'c', 'd']

df1 = pds.DataFrame(np.random.rand(4,3), columns=data_files[:-1])
df2 = pds.DataFrame(np.random.rand(4,3), columns=data_files[1:])

df1.plot(kind='bar', ax=plt.subplot(121))
df2.plot(kind='bar', ax=plt.subplot(122))

plt.show()
Run Code Online (Sandbox Code Playgroud)

使用以下输出:

产量

不幸的是,不同图中每个标签的列颜色不一致.是否可以传入(文件名:颜色)字典,以便任何特定列始终具有相同的颜色.例如,我可以想象通过使用Matplotlib color_cycle压缩文件名来创建它:

data_files = ['a', 'b', 'c', 'd']
colors = plt.rcParams['axes.color_cycle']
print zip(data_files, colors)

[('a', u'b'), ('b', u'g'), ('c', u'r'), ('d', u'c')]
Run Code Online (Sandbox Code Playgroud)

我可以直接用Matplotlib弄清楚如何做到这一点:我只是觉得可能有一个更简单的内置解决方案.

编辑:

下面是一个部分解决方案,适用于纯Matplotlib.但是,我在IPython笔记本中使用它,将分发给非程序员同事,我想尽量减少过多的绘图代码.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pds

data_files = ['a', 'b', 'c', 'd']
mpl_colors …
Run Code Online (Sandbox Code Playgroud)

matplotlib pandas

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

更改呼叫单元内部颜色

我正在尝试在Excel中创建一个非常简单的VBA函数,用于计算特定值(基于另一个单元格内容)并设置调用单元格值和内部颜色.我对值计算很好,但它是内部着色让我循环.

我可以执行以下操作来设置文本和字体颜色:

Function Test()
    Application.Caller.Font.ColorIndex = 3
    Test = "Hello"
End Function
Run Code Online (Sandbox Code Playgroud)

但我宁愿设置细胞内部颜色.我已经尝试了下面代码的几个不同的迭代,但这总是在调用单元格中给出一个值错误.

Function Test()
    Application.Caller.Interior.ColorIndex = 3
    Test = "Hello"
End Function
Run Code Online (Sandbox Code Playgroud)

无论如何,我已经看到一些其他SO帖子谈论类似的变化(例如这里),但他们的解决方案似乎并不适合我.我宁愿不使用条件格式化这样做,因为我想要一些我可以轻松地在不同的Excel文件之间传输的东西.

excel vba excel-vba

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

SQLAlchemy 使用生成器执行许多操作

问题:对于 Connnection 对象的执行函数,是否可以使用返回字典而不是字典列表的生成器来执行“executemany”插入?

详细信息:我正在尝试通过核心表达式来学习 SQLAlchemy 。作为测试,我有一个相当大的数据集,通过迭代器从文件访问,我试图将其传输到 PostgreSQL 表中,但插入单个行非常慢(请参见下面的示例 1)。根据文档,如果传入字典列表而不是单个字典,则Connnection 对象的函数execute()将执行等效操作。executemany()我做了一些快速测试,实际上这种方法对于插入组来说要快得多。不幸的是,对于我的大数据集,我无法在内存中创建完整的字典列表,因此我的问题......

示例 1:以下(伪)代码对于大量数据来说非常慢

from sqlalchemy import MetaData, Table, Column

metadata = MetaData()
data = Table('data', metadata, Column...)

engine = sql.create_engine('postgresql://user:pass$@localhost/testdb')
metadata.create_all(engine)

conn = engine.connect()
ins = data.insert()
for datum in large_data_iterator:
    datum_dict = do_some_proc(datum)
    conn.execute(ins, datum_dict)
Run Code Online (Sandbox Code Playgroud)

因为执行可以采用多个值,所以最好for用以下生成器版本替换最终循环:

def datagen(iterator):
    for datum in large_data_iterator:
        datum_dict = do_some_proc(datum)
        yield datum_dict

conn = engine.connect()
ins = data.insert()
conn.execute(ins, datagen(large_data_iterator))
Run Code Online (Sandbox Code Playgroud)

但是,这会引发以下异常:AttributeError:“list”对象没有属性“keys”。

有谁知道是否可以让生成器版本正常工作?或者有更好的方法来做到这一点也很棒。谢谢!

注意:我测试了一个修改后的生成器表达式,它生成作为字典列表的块(如下),并且它比单独执行的速度更快。但是,我不知道如何选择最佳的块数,并且我担心生成器代码增加的复杂性使其更容易出错。(但如果这是唯一的方法......)

def datagen(iterator): …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

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

标签 统计

excel ×1

excel-vba ×1

matplotlib ×1

pandas ×1

python ×1

sqlalchemy ×1

vba ×1