新手问题:是否有 pandas truncate 的就地版本?
例如
>>> df = pandas.DataFrame({'stuff':range(5)}, index=range(5))
>>> df.truncate(2,3)
Run Code Online (Sandbox Code Playgroud)
返回一个新的截断数据框。我可以
>>> df = pandas.DataFrame({'stuff':range(5)}, index=range(5))
>>> df = df.truncate(2,3)
Run Code Online (Sandbox Code Playgroud)
但这似乎效率低下。有没有一种方法可以进行更有效的截断,即不进行复制,而是就地截断?或者这种效率不是由于一些超级聪明的 pandas 设计而成为问题吗?
请注意,截断的文档字符串说有一个复制选项,但我认为这不会影响数据帧本身是否被截断,而是影响返回的值是数据帧的副本还是对数据帧的一部分的引用。请参阅下面的内容了解我的意思:
>>> df = pandas.DataFrame({'stuff':range(5)}, index=range(5))
>>> cp = df.truncate(2,3, copy=False)
>>> df
stuff
0 0
1 1
2 2
3 3
4 4
>>> cp['stuff'][2] = -50
>>> df
stuff
0 0
1 1
2 -50
3 3
4 4
Run Code Online (Sandbox Code Playgroud)
请注意,当我们使用copy=Falsedf 时,它仍然没有被截断,但返回的对象是 df 的一个切片,在修改时也会修改 df。
谢谢。
在Python 2.7中,我可以像这样创建一个字符数组:
#Python 2.7 - works as expected
from array import array
x = array('c', 'test')
Run Code Online (Sandbox Code Playgroud)
但是在Python 3 'c'中不再是一个可用的类型代码.如果我想要一个字符数组,我该怎么办?该'u'类型也被删除.
#Python 3 - raises an error
from array import array
x = array('c', 'test')
Run Code Online (Sandbox Code Playgroud)
TypeError:不能使用str来初始化类型为'c'的数组
我正在努力将现有程序从Python2 转换为Python3.程序中的一种方法使用远程服务器对用户进行身份验证.它会提示用户输入密码.
def _handshake(self):
timestamp = int(time.time())
token = (md5hash(md5hash((self.password).encode('utf-8')).hexdigest()
+ str(bytes('timestamp').encode('utf-8'))))
auth_url = "%s/?hs=true&p=1.2&u=%s&t=%d&a=%s&c=%s" % (self.name,
self.username,
timestamp,
token,
self.client_code)
response = urlopen(auth_url).read()
lines = response.split("\n")
if lines[0] != "OK":
raise ScrobbleException("Server returned: %s" % (response,))
self.session_id = lines[1]
self.submit_url = lines[3]
Run Code Online (Sandbox Code Playgroud)
此方法的问题是在将整数转换为字符串后,需要对其进行编码.但据我所知,它已经编码了?我发现了这个问题,但我很难将其应用到该程序的上下文中.
这是给我带来问题的路线.
+ str(bytes('timestamp').encode('utf-8'))))
TypeError: string argument without an encoding我尝试过使用其他方法来解决这个问题,所有这些都有不同类型的错误.
+ str(bytes('timestamp', 'utf-8'))))
TypeError: Unicode-objects must be encoded before hashing+ str('timestamp', 'utf-8')))
TypeError: decoding str is not supported我还在开始学习Python(但我初学到Java的中级知识),所以我还不完全熟悉这门语言.有没有人对这个问题有什么想法?
谢谢!
pandas在不同的DataFrame/ 之间进行for操作的隐式索引匹配Series非常有用,并且在大多数情况下,它只是有效的。
但是,我偶然发现了一个无法按预期工作的示例:
import pandas as pd # 0.21.0
import numpy as np # 1.13.3
x = pd.Series([True, False, True, True], index = range(4))
y = pd.Series([False, True, True, False], index = [2,4,3,5])
# logical AND: this works, symmetric as it should be
pd.concat([x, y, x & y, y & x], keys = ['x', 'y', 'x&y', 'y&x'], axis = 1)
# x y x&y y&x
# 0 True NaN False False
# 1 False NaN …Run Code Online (Sandbox Code Playgroud) 如果可能的话,我正在寻找对嵌套数据结构使用推导式的替代方法,或使用嵌套列表推导式的方法。
在没有理解的情况下,使用嵌套循环生成项目列表的工作方式如下:
combos = []
for a in iterable:
for b in valid_posibilities(a):
combos.append((a,b))
Run Code Online (Sandbox Code Playgroud)
将其转换为理解保留了循环的顺序,这使得使用多行很好:
combos = [
(a,b)
for a in iterable
for b in valid_posibilities(a)
]
Run Code Online (Sandbox Code Playgroud)
但是,这会创建一个列表。如果我想要一些代码来生成嵌套数据结构,那么我会使用这样的东西:
# same as above but instead of list of (a,b) tuples,
# I want a dictionary of {a:[b]} structure
combos_map = {}
for a in iterable:
options = []
for b in valid_posibilities(a):
options.append(b)
combos_map[a] = options
Run Code Online (Sandbox Code Playgroud)
(以下代码段具有使用普通列表的等效代码,适用于那些之前没有看过字典理解并且第一次看到它以奇怪的方式嵌套的人很难理解)
combos = []
for a in iterable:
for b in valid_posibilities(a):
combos.append((a,b))
Run Code Online (Sandbox Code Playgroud)
现在将其转换为理解,我们得到: …
给定一个带有类Foo的模块,该模块具有调用bar模块范围中定义的函数的方法,是否有办法在bar不修改模块的情况下替换不同的函数?
class Foo(object):
def run(self):
bar()
def bar():
return True
Run Code Online (Sandbox Code Playgroud)
那么我的一个实例Foo为,我想替代的功能baz()为bar(),而无需修改Foo类.
以下所有内容均来自www.pythontutor.com的主页(顺便提一下,这是一个很棒的工具和网站).
这是一些代码
以下是作者在上述代码的当前执行点描述的"全局框架"和"堆栈框架":
我的问题: "全局框架"和"堆栈框架"之间有什么区别?这个术语是否正确(我用Google搜索并得到各种不同的答案)?
我正在尝试使用以下命令在miniconda中使用environment.yml创建虚拟环境(其中environment.yml包含所有依赖项的列表。):
conda env create -f environment.yml
Run Code Online (Sandbox Code Playgroud)
但是我得到这个错误(这是整个输出)
Error: prefix already exists: /home/danish/miniconda3/envs/venv
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我纠正错误吗?
提前致谢 :)
今天开始玩python的tkinter并遇到了一些问题.我创建了一个动画,以给定的速度在屏幕上移动球.(当它击中屏幕时,它会返回)
为什么我的球看起来很糟糕?它的形状不均匀?(它像眨眼一样)
有没有更好的方法呢?
代码:
from tkinter import *
import time
WIDTH = 800
HEIGHT = 500
SIZE = 100
tk = Tk()
canvas = Canvas(tk, width=WIDTH, height=HEIGHT, bg="grey")
canvas.pack()
color = 'black'
class Ball:
def __init__(self):
self.shape = canvas.create_oval(0, 0, SIZE, SIZE, fill=color)
self.speedx = 3
self.speedy = 3
def update(self):
canvas.move(self.shape, self.speedx, self.speedy)
pos = canvas.coords(self.shape)
if pos[2] >= WIDTH or pos[0] <= 0:
self.speedx *= -1
if pos[3] >= HEIGHT or pos[1] <= 0:
self.speedy *= -1
ball …Run Code Online (Sandbox Code Playgroud) 假设我有两个数据帧:
import string
import pandas as pd
d = {'one': pd.Series(range(26), index = list(string.ascii_lowercase)),
'two': pd.Series([1., 2., 3., 4.], index = ['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
d2 = {'one': pd.Series(range(10), index = range(11, 21))}
df2 = pd.DataFrame(d2)
Run Code Online (Sandbox Code Playgroud)
现在,我有一个索引列表:
np.random.seed(12)
i = np.random.choice(np.arange(11, 21), size = 26)
Run Code Online (Sandbox Code Playgroud)
现在,我想加入df2与df1基于i.
df['new_col'] = df2['one'][i]
Run Code Online (Sandbox Code Playgroud)
但是我得到了上面提到的错误.解决这个问题的一种方法是i直接添加df1,并创建一个名为iin 的列df2来表示index,然后执行a merge但看起来非常低效.有一个更好的方法吗?
我知道有几个问题有相同的标题,但没有一个对我的案例有任何帮助.
我有一个for循环,它将字符串列表中每个元素的子字符串与另一个字符串列表中的元素进行比较。
mylist = []
for x in list1:
mat = False
for y in list2:
if x[:-14] in y:
mat = True
if not mat:
mylist.append(x)
Run Code Online (Sandbox Code Playgroud)
不过,我想将其放入列表理解中(for 循环并不符合我的口味),但无法找到一种方法来计算mat.
我尝试过以下变体:
mylist = [x for x in list1 if x[:-14] in list2]
Run Code Online (Sandbox Code Playgroud)
但这与原始循环的逻辑不同。有没有办法将原来的 for 循环改造成列表理解?
我无意中更改了IDLE Python中的默认字体..并且不记得原始字体名称...因此无法更改回原始字体.
请告诉IDLE中使用的默认字体名称..
要检查,请使用以下步骤...
进入"选项"菜单,然后选择"配置IDLE"按钮
查看当前选择的字体
谢谢你的帮助!!
python ×11
python-3.x ×4
pandas ×3
python-2.7 ×2
anaconda ×1
arrays ×1
conda ×1
encoding ×1
global ×1
list ×1
miniconda ×1
numpy ×1
python-idle ×1
stack ×1
stack-trace ×1
string ×1
tkinter ×1
utf-8 ×1