我有以下pandas数据帧:
dfalph.head()
token year uses books
386 xanthos 1830 3 3
387 xanthos 1840 1 1
388 xanthos 1840 2 2
389 xanthos 1868 2 2
390 xanthos 1875 1 1
Run Code Online (Sandbox Code Playgroud)
我使用重复令牌聚合行,并且如下所示:
dfalph = dfalph[['token','year','uses','books']].groupby(['token', 'year']).agg([np.sum])
dfalph.columns = dfalph.columns.droplevel(1)
dfalph.head()
uses books
token year
xanthos 1830 3 3
1840 3 3
1867 2 2
1868 2 2
1875 1 1
Run Code Online (Sandbox Code Playgroud)
我没有在索引中使用'token'和'year'字段,而是希望将它们返回到列并具有整数索引.
在IPython笔记本中,以下代码显示单元格下方的SVG:
from IPython.display import SVG
SVG(url='http://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg')
Run Code Online (Sandbox Code Playgroud)
以下内容不显示:
from IPython.display import SVG
def show_svg():
SVG(url='http://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg')
Run Code Online (Sandbox Code Playgroud)
有没有办法在函数(或类)中显示SVG?
我想知道是否有一种方法可以在垂直渐变下填充pyplot曲线,就像在这个快速模型中一样:

我在StackOverflow上发现了这个黑客,我不介意多边形,如果我能弄清楚如何使颜色贴图垂直:如何在Python matplotlib中的曲线下填充彩虹色
我知道如何使用apply或np.where基于另一列的值创建新列,但是有选择地更改现有列的值的方法正在逃避我; 我怀疑df.ix是参与?我接近了吗?
例如,这是一个简单的数据帧(我的数据行有数万行).如果名称以字母'e'结尾,我想更改'flag'列中的值(假设为'Blue'):
>>> import pandas as pd
>>> df = pd.DataFrame({'name':['Mick', 'John', 'Christine', 'Stevie', 'Lindsey'], \
'flag':['Purple', 'Red', nan, nan, nan]})[['name', 'flag']]
>>> print df
name flag
0 Mick Purple
1 John Red
2 Christine NaN
3 Stevie NaN
4 Lindsey NaN
[5 rows x 2 columns]
Run Code Online (Sandbox Code Playgroud)
我可以根据我的标准制作一个布尔系列:
>boolean_result = df.name.str.contains('e$')
>print boolean_result
0 False
1 False
2 True
3 True
4 False
Name: name, dtype: bool
Run Code Online (Sandbox Code Playgroud)
我只需要关键步骤来获得以下结果:
>>> print result_wanted
name flag …Run Code Online (Sandbox Code Playgroud) 我有一个包含不同轴上两个变量的折线图:

.csv 文件在蓝色系列的开头和结尾处缺少值(“关闭”):
date,open,close
1-May-89,161,
1-May-90,170,
1-May-91,137,
1-May-92,144,91.9
1-May-93,91,91.8
(...)
1-May-11,12,75.7
1-May-12,7,68.2
1-May-13,15,
Run Code Online (Sandbox Code Playgroud)
末尾的缺失值已得到正确处理(该行被截断),但前三个值被视为零值。我怎样才能让蓝色的“关闭”系列从 1992 年开始?
我想使用第三列来加权熊猫交叉表中的结果。
例如,以下内容:
import pandas as pd
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'bar'],
'B': [1, 1, 0, 0, 0],
'weight': [2, 3, 4, 5, 6]})
print(pd.crosstab(df.A, df.B))
Run Code Online (Sandbox Code Playgroud)
结果是:
B 0 1
A
bar 2 1
foo 1 1
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
B 0 1
A
bar 11 3
foo 4 2
Run Code Online (Sandbox Code Playgroud) 这是我的代码,它可以正常工作:
df = pd.DataFrame({
'foo' : [1, 2, 7, 2],
'bar' : [3, 1, 3, 2],
'spam' : [5, 2, 1, 0]
})
x = range(len(df.foo))
fig, ax = plt.subplots()
ax.stackplot(x, df.foo, df.bar, df.spam)
# plt.savefig('stackedarea.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)

我的问题是,我如何传递一个列表,所以我不必明确键入每一列(Df.foo,df.bar ...)?
我仍然是lambda函数和列表推导的初学者,我怀疑其中一个是必需的.
(1)我的第一个想法,是传递一个列名列表
columnlist = ['foo', 'bar']
# snip
ax.stackplot(x, #something_goes_here) #I tried df[columnlist[, no joy
Run Code Online (Sandbox Code Playgroud)
(2)我的第二个想法,传递一列列:
columnlist = ['foo', 'bar']
#here is where I don't know how to transform column list so it becomes
# passedlist, where passedlist = [df.foo, df.bar] …Run Code Online (Sandbox Code Playgroud) 我经历过的to_json和json.dumps文档,并试图各种指标和类型的字典的,而且我迷路......我可以创建类似字典的名称-值对,但不是嵌套的JSON我需要的那种类型.
我开始使用这种格式的pandas数据帧:
level_1 level_2 level_3 numeric
0 alpha one a 1
1 alpha one b 2
2 alpha two a 3
3 alpha two b 4
4 beta one a 5
5 beta one b 6
6 beta two a 7
7 beta two b 8
Run Code Online (Sandbox Code Playgroud)
我需要一个具有以下格式的JSON文件:
{"alpha": {"one": {"a": 1, "b": 1}, "two": {"a": 3, "b": 4 etc...
Run Code Online (Sandbox Code Playgroud) 道歉,我只能想象StackOverflow上到处都是人,但仍然没有完全掌握装饰者.
我试图装饰一系列与os相关的函数,这样如果有任何异常,例如FileNotFoundError或PermissionError,用户可以解决问题,并再试一次.
所以我已经创建了这个玩具函数和装饰器,我不明白我在哪里没有正确地跟踪我一直在阅读的示例装饰器,而且我无法通过它推理我的方式:
from functools import wraps
def continual_retry(func):
def retry_decorated(*args, **kwargs):
@wraps(func)
def func_wrapper(*args, **kwargs):
while not stop:
try:
func(*args)
stop = True
except Exception as e:
print(f'Could not perform function {func.__name__}')
print(f' with args {repr(args)}')
print(f' due to error {e.class__}')
redo = input('Retry (y/n)? ')
if redo.lower() != 'y':
print('Exiting program due to error and user input')
sys.exit(0)
return func_wrapper
return retry_decorated
@continual_retry
def divide(a, b):
return a/b
Run Code Online (Sandbox Code Playgroud)
当我运行该函数时divide,结果如下:
>>> divide(1, 2)
<function __main__.divide(a, b)>
Run Code Online (Sandbox Code Playgroud)
我期待的结果 …
python ×8
pandas ×5
matplotlib ×2
crosstab ×1
d3.js ×1
decorator ×1
gradient ×1
json ×1
multi-index ×1
scipy ×1
statsmodels ×1
svg ×1