小编Lat*_*der的帖子

在Pycharm中调试nosetest测试不显示输出

我正在尝试使用PyCharm中的nosetests调试测试.我需要在断点处停止并使用PyCharm调试控制台进行一些交互式调试.但是,每当我在调试控制台提示符下键入任何内容时,都不打印任何内容 我刚刚得到一个新的提示.调试控制台与pytest完美配合,但我需要使用nosetests进行此特定测试.如何让控制台正常工作?

debugging nose pycharm

15
推荐指数
2
解决办法
2550
查看次数

大熊猫滚动申请不做任何事情

我有一个像这样的DataFrame:

df2 = pd.DataFrame({'date': ['2015-01-01', '2015-01-02', '2015-01-03'],
                    'value': ['a', 'b', 'a']})

         date value
0  2015-01-01     a
1  2015-01-02     b
2  2015-01-03     a
Run Code Online (Sandbox Code Playgroud)

我试图了解如何应用自定义滚动功能.我试过这样做:

df2.rolling(2).apply(lambda x: 1)
Run Code Online (Sandbox Code Playgroud)

但这给了我原始的DataFrame:

         date value
0  2015-01-01     a
1  2015-01-02     b
2  2015-01-03     a
Run Code Online (Sandbox Code Playgroud)

如果我有一个不同的DataFrame,像这样:

df3 = pd.DataFrame({'a': [1, 2, 3], 'value': [4, 5, 6]})
Run Code Online (Sandbox Code Playgroud)

同样的滚动似乎有效:

df3.rolling(2).apply(lambda x: 1)

     a  value
0  NaN    NaN
1  1.0    1.0
2  1.0    1.0
Run Code Online (Sandbox Code Playgroud)

为什么这不适用于第一个DataFrame?

熊猫版:0.20.2

Python版本:2.7.10

更新

所以,我已经意识到df2列的是对象类型,而我的lambda函数的输出是一个整数.df3列是整数列.我假设这就是为什么apply不起作用的原因.

以下不起作用:

df2.rolling(2).apply(lambda x: …
Run Code Online (Sandbox Code Playgroud)

python pandas

13
推荐指数
1
解决办法
1227
查看次数

在Python中使用yield from with条件

假设我有一个这样的生成器:

def a(data):
    for val in data:
        yield val
Run Code Online (Sandbox Code Playgroud)

假设我想将此生成器包装在另一个生成器 中,b该生成器仅生成 中的一些值a,具体取决于它们的值。b应该能够将从调用者发回的值转发到a. 我知道将一个生成器包装在另一个生成器中的最新方法是使用该yield from语句。就像是:

def b(data):
    yield from val = a(data) if val == "foo"
Run Code Online (Sandbox Code Playgroud)

我知道语法是错误的(这只是为了理解这个想法),所以我想知道是否有正确的方法来使用yield from条件语句。或者我应该使用其他一些构造?

python generator

10
推荐指数
1
解决办法
9969
查看次数

使用python ElementTree的itertree函数并将修改后的树写入输出文件

我需要解析一个非常大的(~40GB)XML文件,从中删除某些元素,并将结果写入新的xml文件.我一直在尝试使用python的ElementTree中的iterparse,但我对如何修改树然后将结果树写入新的XML文件感到困惑.我已经阅读了关于itertree的文档,但它还没有解决问题.有没有简单的方法来做到这一点?

谢谢!

编辑:这是我到目前为止所拥有的.

import xml.etree.ElementTree as ET
import re 

date_pages = []
f=open('dates_texts.xml', 'w+')

tree = ET.iterparse("sample.xml")

for i, element in tree:
    if element.tag == 'page':
        for page_element in element:
            if page_element.tag == 'revision':
                for revision_element in page_element:
                    if revision_element.tag == '{text':
                        if len(re.findall('20\d\d', revision_element.text.encode('utf8'))) == 0:
                            element.clear()
Run Code Online (Sandbox Code Playgroud)

python xml elementtree

8
推荐指数
2
解决办法
3385
查看次数

熊猫:将带有空字符串的列转换为浮点数

在我的应用程序中,我收到一个pandas DataFrame(例如block),其中有一个名为的列est。此列可以包含字符串或浮点数的混合。我需要将列中的所有值都转换为浮点数,并且将列类型设置为float64。我使用以下代码执行此操作:

block[est].convert_objects(convert_numeric=True)
block[est].astype('float')
Run Code Online (Sandbox Code Playgroud)

这适用于大多数情况。但是,在一种情况下,est包含所有空字符串。在这种情况下,第一个语句将正确执行,但列中的空字符串仍为空字符串。然后,第二条语句导致错误:ValueError: could not convert string to float:

如何修改代码以处理包含所有空字符串的列?

编辑:我知道我可以做block[est].replace("", np.NaN),但是我想知道是否有某种方法可以做到公正,convert_objects或者astype我错过了。

说明:出于项目特定的原因,我需要使用pandas 0.16.2。

这是与一些演示失败的示例数据的交互:

>>> block = pd.DataFrame({"eps":["", ""]})
>>> block = block.convert_objects(convert_numeric=True)
>>> block["eps"]
0
1
Name: eps, dtype: object
>>> block["eps"].astype('float')
...
ValueError: could not convert string to float:
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
2
解决办法
7579
查看次数

python3上下文管理器强制提前退出

我需要创建一个上下文管理器,当满足某些条件时,可以强制它提前退出.

更多细节:

上下文管理器需要处理检查/锁定/释放资源.在__enter__,上下文管理器需要检查资源是否被锁定.如果是,我想在__exit__不执行上下文中的代码的情况下调用.否则,上下文管理器获取资源,执行上下文代码,并清理资源__exit__.

它可能看起来像这样:

class my_context_manager:
    def __enter__(self):
        if resource_locked():
            self.__exit__(None, ResourceLockedException(), None)
        else:
            acquire_resource()

    def __exit__(self, *exc_info):
        if not isinstance(exc_info[1], ResourceLockedException):
            release_resource()
        else:
            log.warn("Resource already in use.")
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码实际上并不起作用,因为调用__exit__内部__enter__并不会阻止上下文中的代码被执行.

或者,我可以ResourceLockedException从内部抛出__enter__,但之后__exit__不会被调用,因为异常将从上下文管理器本身抛出.我希望能够捕获异常,记录警告,如果资源被锁定则不输入上下文.

这归结为找到一些早期关闭上下文的方法,因此__exit__调用它并且不执行上下文代码.有没有办法调整上述任何一个想法来做到这一点?或者还有另一种方式吗?

contextmanager python-3.x

6
推荐指数
1
解决办法
917
查看次数

使用 pd.read_csv 时跳过日期错误的行

我正在使用 读取来自外部数据源的 csv 文件pd.read_csv,如下面的代码所示:

pd.read_csv(
    BytesIO(raw_data),
    parse_dates=['dates'],
    date_parser=np.datetime64,
)
Run Code Online (Sandbox Code Playgroud)

但是,在发送的 csv 中的某处,日期格式错误,导致以下错误:

ValueError: Error parsing datetime string "2015-08-2" at position 8
Run Code Online (Sandbox Code Playgroud)

这会导致整个应用程序崩溃。当然,我可以使用 try/except 处理这种情况,但是我将丢失该特定 csv 中的所有其他数据。我需要熊猫来保存和解析其他数据。

我无法预测这些数据(每天都在变化)的日期格式错误的时间/地点。有没有办法pd.read_csv只跳过日期错误的行,但仍然解析 csv 中的所有其他行?

python csv pandas

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

大熊猫用NaT代替NaN

我有一些我需要用NaT取代的NaN系列.我怎样才能做到这一点?

这是我到目前为止尝试过的一个简单示例:

>>> s = pd.Series([np.NaN, np.NaN])
>>> s.fillna(pd.NaT)
0   NaN
1   NaN
dtype: float64
>>> s.replace(np.NaN, pd.NaT)
0   NaN
1   NaN
dtype: float64
>>> s.where(pd.notnull(s), pd.NaT)
0    NaN
1    NaN
dtype: object
Run Code Online (Sandbox Code Playgroud)

熊猫版:0.16.2

numpy版本:1.9.2

python版本:2.7.10

python pandas

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

将Binarizer与sklearn模型一起保存

我正在尝试构建具有2个组件的服务。在第1部分中,我通过创建,使用sklearn训练了机器学习模型Pipeline。该模型使用joblib.dump(真的numpy_pickle.dump)序列化。组件2在云中运行,加载由(1)训练的模型,并使用它来标记作为输入的文本。

我遇到一个问题,在训练期间(组件1),我需要首先对数据进行二值化,因为它是文本数据,这意味着该模型在二值化输入上进行了训练,然后使用由二值化器创建的映射进行预测。当(2)根据模型进行预测时,我需要重新获得此映射,以便可以输出实际的文本标签。

我试图像这样将binarizer添加到管道中,以为模型将具有映射本身:

p = Pipeline([
('binarizer', MultiLabelBinarizer()),
('vect', CountVectorizer(min_df=min_df, ngram_range=ngram_range)), 
('tfidf', TfidfTransformer()), 
('clf', OneVsRestClassifier(clf))
])
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

model = p.fit(training_features, training_tags)
*** TypeError: fit_transform() takes 2 positional arguments but 3 were given
Run Code Online (Sandbox Code Playgroud)

我的目标是确保将二进制化器和模型绑定在一起,以便用户知道如何解码模型的输出。

有哪些现有的范例可以做到这一点?是否应该在我创建的其他对象中将二进制化器与模型一起序列化?还有其他将二进制化器传递给Pipeline我的方法,这样我就不必这样做,如果这样做,我是否能够从模型取回映射?

version-control machine-learning scikit-learn

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

如何为使用模板创建的 GCE 实例允许 HTTP/HTTPS?

我创建了一个 Google Compute Engine 实例模板,并设置了以下防火墙选项:

GCE实例组模板

然后,我从该模板创建一个实例组,但我似乎无法通过 HTTP/HTTPS 访问该实例。当我查看实例组的设置时,我发现 HTTP/HTTPS 框未选中

GCE实例组防火墙设置

这里发生了什么?这些框不应该被选中吗?我是否应该通过其他方式允许从模板创建的实例组/实例使用 HTTP/HTTPS?

https networking http google-cloud-platform

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

是否可以在Python中覆盖namedtuple中的方法?

假设我有这样一个类:

class Foo(namedtuple('Foo', ['f1'])):
    def f1(self):
        print('Default f1')

    def __new__(cls, f1=f1):
        return super().__new__(cls, f1)
Run Code Online (Sandbox Code Playgroud)

让我们说我稍后创建一个Foo对象并选择覆盖f1的方法定义,如下所示:

def my_f1():
    print("My f1")

foo = Foo(f1=my_f1)
Run Code Online (Sandbox Code Playgroud)

如果我然后尝试:

foo.f1()
Run Code Online (Sandbox Code Playgroud)

我明白了:

Default f1
Run Code Online (Sandbox Code Playgroud)

当然,我正试图打印"我的f1".我也希望f1是可选的.这里发生了什么?是否可以为namedtuple中的方法定义默认实现,然后在new中覆盖它?

python overriding namedtuple

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

更改 PostgreSQL 视图中的列名

我在 PostgreSQL 数据库中有一个表 x 和一个基于 x 的视图 x_view。

X:

CREATE TABLE x (
A double precision
);
Run Code Online (Sandbox Code Playgroud)

x_视图:

CREATE VIEW x_view AS
 SELECT x.A;
Run Code Online (Sandbox Code Playgroud)

我将 x 中的一列从 A 重命名为 B。

ALTER TABLE x RENAME COLUMN A to B
Run Code Online (Sandbox Code Playgroud)

当我查看视图的定义时,我看到以下内容:

SELECT x.B AS A from x;
Run Code Online (Sandbox Code Playgroud)

当我执行“SELECT * FROM x_view”时,现在应该标记为 B 的列仍标记为 A。

为什么执行“SELECT * FROM x_view”时视图不会自动更改列名?除了必须删除并重新创建视图之外,还有什么方法可以强制它这样做?

postgresql rename view

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