小编Tad*_*sen的帖子

pandas 截断的就地版本?

新手问题:是否有 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 pandas

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

python 3中的字符数组?

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'的数组

python arrays python-3.x

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

"TypeError:没有编码的字符串参数",但字符串是否已编码?

我正在努力将现有程序从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的中级知识),所以我还不完全熟悉这门语言.有没有人对这个问题有什么想法?

谢谢!

python string encoding utf-8 python-3.x

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

索引不相等的布尔熊猫之间的操作的对称性破碎

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)

numpy python-3.x pandas

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

列表理解循环顺序取决于嵌套

如果可能的话,我正在寻找对嵌套数据结构使用推导式的替代方法,或使用嵌套列表推导式的方法。

在没有理解的情况下,使用嵌套循环生成项目列表的工作方式如下:

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)

现在将其转换为理解,我们得到: …

python list-comprehension dictionary-comprehension

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

如何在现有方法中替换函数调用

给定一个带有类Foo的模块,该模块具有调用bar模块范围中定义的函数的方法,是否有办法在bar不修改模块的情况下替换不同的函数?

class Foo(object):
    def run(self):
        bar()

def bar():
    return True
Run Code Online (Sandbox Code Playgroud)

那么我的一个实例Foo为,我想替代的功能baz()bar(),而无需修改Foo类.

python monkeypatching

4
推荐指数
1
解决办法
2067
查看次数

全局帧与堆栈帧

以下所有内容均来自www.pythontutor.com的主页(顺便提一下,这是一个很棒的工具和网站).

这是一些代码

这是一些代码:

以下是作者在上述代码的当前执行点描述的"全局框架"和"堆栈框架":

以下是作者在上述代码的当前执行点描述的

我的问题: "全局框架"和"堆栈框架"之间有什么区别?这个术语是否正确(我用Google搜索并得到各种不同的答案)?

python stack global stack-trace python-2.7

4
推荐指数
1
解决办法
6369
查看次数

在miniconda中使用environment.yml创建虚拟环境

我正在尝试使用以下命令在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 anaconda conda miniconda

3
推荐指数
1
解决办法
5385
查看次数

tkinter - 形状不均匀,动画看起来很糟糕

今天开始玩python的tkinter并遇到了一些问题.我创建了一个动画,以给定的速度在屏幕上移动球.(当它击中屏幕时,它会返回)

  1. 为什么我的球看起来很糟糕?它的形状不均匀?(它像眨眼一样)

  2. 有没有更好的方法呢?

代码:

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)

python tkinter

3
推荐指数
1
解决办法
448
查看次数

ValueError:无法从重复轴重新索引

假设我有两个数据帧:

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)

现在,我想加入df2df1基于i.

df['new_col'] = df2['one'][i]
Run Code Online (Sandbox Code Playgroud)

但是我得到了上面提到的错误.解决这个问题的一种方法是i直接添加df1,并创建一个名为iin 的列df2来表示index,然后执行a merge但看起来非常低效.有一个更好的方法吗?

我知道有几个问题有相同的标题,但没有一个对我的案例有任何帮助.

python pandas

2
推荐指数
1
解决办法
1万
查看次数

将 for 循环转换为列表理解

我有一个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 循环改造成列表理解?

python list-comprehension list

-2
推荐指数
1
解决办法
1722
查看次数

默认IDLE(Python 2.7)字体

我无意中更改了IDLE Python中的默认字体..并且不记得原始字体名称...因此无法更改回原始字体.

请告诉IDLE中使用的默认字体名称..

要检查,请使用以下步骤...

看图

进入"选项"菜单,然后选择"配置IDLE"按钮

看图

查看当前选择的字体

谢谢你的帮助!!

python python-idle python-2.7 python-3.x

-2
推荐指数
1
解决办法
2万
查看次数