我有python pandas数据帧,其中一列包含月份名称.
如何使用字典进行自定义排序,例如:
custom_dict = {'March':0, 'April':1, 'Dec':3}
Run Code Online (Sandbox Code Playgroud) 在Python中我收到以下错误:
UnboundLocalError: local variable 'total' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
在文件的开头(在出现错误的函数之前),我使用global关键字声明'total'.然后,在程序的主体中,在调用使用'total'的函数之前,我将它指定为0.我已经尝试在各个地方将它设置为0(包括文件的顶部,就在它被声明之后) ),但我不能让它工作.有谁看到我做错了什么?
我想了解如何使用dis(Python字节码的解析器).具体来说,如何解释dis.dis(或dis.disassemble)的输出?
.
这是一个非常具体的例子(在Python 2.7.3中):
dis.dis("heapq.nsmallest(d,3)")
0 BUILD_SET 24933
3 JUMP_IF_TRUE_OR_POP 11889
6 JUMP_FORWARD 28019 (to 28028)
9 STORE_GLOBAL 27756 (27756)
12 LOAD_NAME 29811 (29811)
15 STORE_SLICE+0
16 LOAD_CONST 13100 (13100)
19 STORE_SLICE+1
Run Code Online (Sandbox Code Playgroud)
我看到JUMP_IF_TRUE_OR_POP等等是字节码指令(虽然有趣的是,BUILD_SET这个列表中没有出现,但我希望它可以工作BUILD_TUPLE).我认为右边的数字是内存分配,左边的数字是转到数字......我注意到它们每次几乎增加3(但不完全).
如果我dis.dis("heapq.nsmallest(d,3)")在函数内部换行:
def f_heapq_nsmallest(d,n):
return heapq.nsmallest(d,n)
dis.dis("f_heapq(d,3)")
0 BUILD_TUPLE 26719
3 LOAD_NAME 28769 (28769)
6 JUMP_ABSOLUTE 25640
9 <44> # what is <44> ?
10 DELETE_SLICE+1
11 STORE_SLICE+1
Run Code Online (Sandbox Code Playgroud) 使用pandas处理实时传入数据的最佳/ pythonic方法是哪种?
每隔几秒钟我就会收到以下格式的数据点:
{'time' :'2013-01-01 00:00:00', 'stock' : 'BLAH',
'high' : 4.0, 'low' : 3.0, 'open' : 2.0, 'close' : 1.0}
Run Code Online (Sandbox Code Playgroud)
我想将它附加到现有的DataFrame,然后对其进行一些分析.
问题是,只是使用DataFrame.append追加行可能导致所有复制的性能问题.
一些人建议预先分配一个大的DataFrame并在数据进入时更新它:
In [1]: index = pd.DatetimeIndex(start='2013-01-01 00:00:00', freq='S', periods=5)
In [2]: columns = ['high', 'low', 'open', 'close']
In [3]: df = pd.DataFrame(index=t, columns=columns)
In [4]: df
Out[4]:
high low open close
2013-01-01 00:00:00 NaN NaN NaN NaN
2013-01-01 00:00:01 NaN NaN NaN NaN
2013-01-01 00:00:02 NaN NaN NaN NaN
2013-01-01 00:00:03 NaN NaN NaN NaN
2013-01-01 …Run Code Online (Sandbox Code Playgroud) 我有两个DataFrames,我想根据列合并.然而,由于交替拼写,不同数量的空格,不存在/存在变音符号,我希望能够合并,只要它们彼此相似即可.
任何相似性算法都可以(soundex,Levenshtein,difflib).
假设一个DataFrame具有以下数据:
df1 = DataFrame([[1],[2],[3],[4],[5]], index=['one','two','three','four','five'], columns=['number'])
number
one 1
two 2
three 3
four 4
five 5
df2 = DataFrame([['a'],['b'],['c'],['d'],['e']], index=['one','too','three','fours','five'], columns=['letter'])
letter
one a
too b
three c
fours d
five e
Run Code Online (Sandbox Code Playgroud)
然后我想得到生成的DataFrame
number letter
one 1 a
two 2 b
three 3 c
four 4 d
five 5 e
Run Code Online (Sandbox Code Playgroud) 为什么执行startwith比切片慢?
In [1]: x = 'foobar'
In [2]: y = 'foo'
In [3]: %timeit x.startswith(y)
1000000 loops, best of 3: 321 ns per loop
In [4]: %timeit x[:3] == y
10000000 loops, best of 3: 164 ns per loop
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,即使包括计算长度,切片仍然显得更快:
In [5]: %timeit x[:len(y)] == y
1000000 loops, best of 3: 251 ns per loop
Run Code Online (Sandbox Code Playgroud)
注意:此行为的第一部分在Python for Data Analysis(第3章)中有说明,但没有提供解释.
.
如果有用:这是C代码startswith ; 这是输出dis.dis:
In [6]: import dis
In [7]: dis_it = lambda …Run Code Online (Sandbox Code Playgroud) 这与正则表达式非常相关,以匹配外部括号,但是,我特别想知道如何或是否可以执行此正则表达式的递归模式?我还没有找到使用这个策略的python示例,所以认为这应该是一个有用的问题!
我已经看到 了一些 索赔 是递归的模式可以用来匹配平衡括号,但使用Python的没有例子正则表达式包(注:重不支持递归模式,你需要使用正则表达式).
一种说法是语法在b(?:m|(?R))*e哪里:
b是什么开始构造,m是什么可以发生在构造的中间,并且e是在构造的末尾可以发生的
我想在以下内容中提取外部大括号的匹配项:
"{1, {2, 3}} {4, 5}"
["1, {2, 3}", "4, 5"] # desired
Run Code Online (Sandbox Code Playgroud)
请注意,对于内括号,这很容易做到:
re.findall(r"{([^{}]*)}", "{1, {2, 3}} {4, 5}")
['2, 3', '4, 5']
Run Code Online (Sandbox Code Playgroud)
(在我的例子中,我使用的是finditer(在匹配对象上),请看这里.)
所以我曾希望以下或某些变体可行:
regex.findall(r"{(:[^{}]*|?R)}", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:[^{}]*|?R)})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*|(?R))*})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*)|(?R)*})", …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来获取带有Java字节数组的SHA-1校验和作为消息.
我应该使用第三方工具还是JVM中内置的东西可以提供帮助?
是否有一种简单的方法可以将数据框(甚至是其中的一部分)导出到LaTeX?
我在谷歌搜索,只能找到使用asciitables的解决方案.
我无法找到一种方法来在pandas中对两个Series对象进行有效的元素最小化.例如,我可以轻松添加两个系列:
In [1]:
import pandas as pd
s1 = pd.Series(data=[1,1,1], index=[1,2,3])
s2 = pd.Series(data=[1,2,2,1], index=[1,2,3,4])
s1.add(s2)
Out[1]:
1 2
2 3
3 3
4 NaN
dtype: float64
Run Code Online (Sandbox Code Playgroud)
但我找不到一种有效的方法来在两个系列之间进行元素最小化(同时对齐索引和处理NaN值).
没关系.有一个带有combine功能的逃生舱,所以你可以放入任何元素功能:
In [2]:
s1 = pd.Series(data=[1,1,1], index=[1,2,3])
s2 = pd.Series(data=[1,2,2,1], index=[1,2,3,4])
s1.combine(s2, min, 0)
Out[2]:
1 1
2 1
3 1
4 0
dtype: int64
Run Code Online (Sandbox Code Playgroud) python ×9
pandas ×5
dataframe ×1
java ×1
latex ×1
python-2.7 ×1
regex ×1
sha1 ×1
startswith ×1