我正在尝试格式化表格,以便每列中的数据根据其值以样式格式化(类似于电子表格程序中的条件格式).如何使用HTML格式化程序在熊猫中实现这一目标?
典型的用例是在表格中突出显示重要值.例如:
correlation p-value
0 0.5 0.1
1 0.1 0.8
2 0.9 *0.01*
Run Code Online (Sandbox Code Playgroud)
pandas允许为HTML输出定义自定义格式化程序 - 要获得上面的输出,可以使用:
import pandas as pd
from pandas.core import format
from StringIO import StringIO
buf = StringIO()
df = pd.DataFrame({'correlation':[0.5, 0.1,0.9], 'p_value':[0.1,0.8,0.01]})
fmt = format.DataFrameFormatter(df,
formatters={'p_value':lambda x: "*%f*" % x if x<0.05 else str(x)})
format.HTMLFormatter(fmt).write_result(buf)
Run Code Online (Sandbox Code Playgroud)
但是,我想更改重要值的样式(例如,使用粗体字体).
一种可能的解决方案是将CSS类附加到<td>
HTML输出中的标记,然后可以使用CSS样式表对其进行格式化.以上将成为:
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>correlation</th>
<th>p_value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td> 0.5</td>
<td> 0.10</td>
</tr>
<tr>
<td>1</td>
<td> 0.1</td>
<td> 0.80</td>
</tr> …
Run Code Online (Sandbox Code Playgroud) 在Python 2中,我可以执行以下操作:
import numpy as np
f = lambda x: x**2
seq = map(f, xrange(5))
seq = np.array(seq)
print seq
# prints: [ 0 1 4 9 16]
Run Code Online (Sandbox Code Playgroud)
在Python 3中,它不再起作用了:
import numpy as np
f = lambda x: x**2
seq = map(f, range(5))
seq = np.array(seq)
print(seq)
# prints: <map object at 0x10341e310>
Run Code Online (Sandbox Code Playgroud)
如何获得旧行为(将map
结果转换为numpy
数组)?
编辑:正如@jonrsharpe在他的回答中指出的那样,如果我先转换seq
成一个列表,这可以修复:
seq = np.array(list(seq))
Run Code Online (Sandbox Code Playgroud)
但我宁愿避免额外的电话list
.
我正在尝试转换DataFrame,这样一些行将被复制给定次数.例如:
df = pd.DataFrame({'class': ['A', 'B', 'C'], 'count':[1,0,2]})
class count
0 A 1
1 B 0
2 C 2
Run Code Online (Sandbox Code Playgroud)
应转变为:
class
0 A
1 C
2 C
Run Code Online (Sandbox Code Playgroud)
这与计数功能的聚合相反.是否有一种简单的方法可以在熊猫中实现它(不使用for循环或列表推导)?
一种可能性是允许DataFrame.applymap
函数返回多行(类似apply
方法GroupBy
).但是,我认为现在大熊猫不可能.
我正在使用reStructuredText编写一个简单的清单.为此我使用一个符号列表,但我想用自定义的迹象,比如空复选框来取代标准的要点.最理想的是,复选框可以在HTML和/或PDF文档中单击.
如果在reST中不可能/无关紧要,你能否推荐其他基于文本的格式?
巴尔托什
我想用Python matplotlib创建包含许多(100)子图的绘图.我找不到合适的语法:
我想要的东西(这不起作用)
plt.subplot(10,10,i,X1, Y)
Run Code Online (Sandbox Code Playgroud)
在一个循环中,i从0到99,然后
plt.show()
Run Code Online (Sandbox Code Playgroud)
许多教程中都提供了语法,以便只有很少的子图.然后,语法可以
plt.close('all')
fig = plt.figure()
ax1 = plt.subplot(221)
ax2 = plt.subplot(223)
ax3 = plt.subplot(122)
example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)
对于我的问题,我想我不能使用与我一样的语法plt.subplot(10101)
,等等,我不明白.
你有解决方案吗?
谢谢
我想使用一些脚本语言(最好是Python)编辑SVG文件.特别是,我想合并两个SVG文件,添加一些注释,并将它们排列在一个更大的图像中.有没有可用于此类目的的软件?
谢谢,
巴尔托什
我终于决定使用nosklo提出的方法.你可以在github repo上找到SVG处理python模块的代码.我还在这篇文章中描述了如何使用它
我想在Django模型中存储用Python生成的大型数据集.我的想法是将数据pickle到字符串并将其上传到我的模型的FileField.我的django模型是:
#models.py
from django.db import models
class Data(models.Model):
label = models.CharField(max_length=30)
file = models.FileField(upload_to="data")
Run Code Online (Sandbox Code Playgroud)
在我的Python程序中,我想做以下事情:
import random, pickle
data_entry = Data(label="somedata")
somedata = [random.random() for i in range(10000)]
# Next line does NOT work
#data_entry.file.save(filename, pickle.dumps(somedata))
Run Code Online (Sandbox Code Playgroud)
如何somedata
在file
保留使用upload_to
参数定义的路径时修改要存储的最后一行?
我有一个带有单个值(标量)的numpy数组,我想将其转换为对应的Python数据类型.例如:
import numpy as np
a = np.array(3)
b = np.array('3')
Run Code Online (Sandbox Code Playgroud)
我可以将它们转换成int
并str
通过铸造:
a_int = int(a)
b_str = str(b)
Run Code Online (Sandbox Code Playgroud)
但我需要提前知道这些类型.我想转换a
为一个整数和b
一个没有显式类型检查的字符串.有没有一种简单的方法来实现它?