小编And*_*rew的帖子

Jupyter 在 Pycharm 中的 shift+tab 行为?

我通常会在 jupyter 笔记本中编写并需要函数签名/文档字符串,因此我会执行类似键入 print() 的操作,然后将光标放在括号之间按 Shift+Tab。pycharm中有类似的东西吗?

我打开了通用代码完成设置,当我在 pycharm 中输入“print”时,它会显示签名,但是一旦我输入左括号,签名/文档就会消失。我发现自己经常编写函数名称,查看文档,然后编写 () ,也许还有一个参数,然后必须转到换行符或其他内容并重写函数名称,以便再次获得文档字符串。对此,更好的工作流程是什么?


编辑:根据反馈,下面是一些额外的图像。建议使用 ctrl+space,但这并没有给我我所希望的。

如果我输入不带括号的函数名称,我会看到以下内容: 在此输入图像描述

这是完美的。但是,当我点击左括号时,描述就会消失,如果我按照建议点击 ctrl+space,我会得到: 在此输入图像描述

按下 ctrl+space 后,然后: 在此输入图像描述 两次 ctrl+space 之后。显然两者不一样,他们为其他事情提供自动完成功能。我需要更改一些设置吗?

另外,ctrl+P 对我没有任何作用 - 也许我在某个时候取消了默认设置?

pycharm

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

如何对单个包使用 python 日志记录

我正在开发一个包并logging在开发过程中使用模块来记录我的调试/信息日志。有没有一种好方法可以只为我的包启用日志记录,而不为 root 以下的所有内容启用日志记录?

假设我有 my_package:

# Some package from elsewhere that I need but don't want to see logging from
import other_package  
    
import logging
from logging import NullHandler
logger = logging.getLogger(__name__)
logger.addHandler(NullHandler())

def my_func():
    logger.debug("a message")
Run Code Online (Sandbox Code Playgroud)

以及使用该包的主要函数:

import my_package
    
# Some package from elsewhere that I need but don't want to see logging from
import another_package

import logging
logging.basicConfig(level=logging.DEBUG)

my_package.my_func()
Run Code Online (Sandbox Code Playgroud)

此设置将让我看到my_func()对 的调用logger.debug(),但它也会显示logger.debug()来自 other_package 和 another_package 的任何调用,这是我不想看到的。如何设置只能看到 my_package 中的日志记录?

我可以做一些奇怪的事情,比如硬编码禁用彼此的包logging.propagate或类似的东西,但这感觉应该有更好的方法。

python logging python-logging

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

使用带有多名称列的Pandas DataFrame

我正在使用Pandas存储一个系统生成列名的大型数据集.像这样的东西:

import numpy as np
import pandas as pd
df = pd.DataFrame([[0,1,2],[10,11,12],[20,21,22]],columns=["r0","r1","r2"])
Run Code Online (Sandbox Code Playgroud)

这些系统名称也有更有意义的名称,用户实际可以理解.到目前为止,我一直使用如下字典映射它们:

altName = {"Objective 1":"r0", "Result 5":"r1", "Parameter 2":"r2"}
Run Code Online (Sandbox Code Playgroud)

这样就可以像这样访问它们:

print(df[altName["Objective 1"]])
Run Code Online (Sandbox Code Playgroud)

这有效,但它导致很难读取代码(想想带有多个变量的绘图命令等).我不能简单地将列重命名为友好名称,因为有时我需要访问这两个列,但我不确定如何在没有字典的情况下同时支持这两个列.

是否可以为列分配多个名称,或者执行某种允许我使用这两种访问方法的隐式映射:

print(df["r0"])
print(df["Objective 1])
Run Code Online (Sandbox Code Playgroud)

我已经想过制作我自己的子类来检测一个keyerror,然后无法使用备用名的辅助字典并试试,但我不确定我是否能够在保留所有其他DataFrame功能的同时做到这一点(我'自我评估我的Python初学者接近中级).

非常感谢您的建议.

python pandas

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

初始化 Pandas 的全真布尔索引

我发现自己有时会迭代地构建布尔值/掩码,例如:

mask = initialize_mask_to_true()
for condition in conditions:
  mask = mask & condition

df_masked = pd.loc[mask, my_cols]
Run Code Online (Sandbox Code Playgroud)

其中条件可能是单独的布尔掩码或比较的列表,例如df[some_col] > someVal 是否有一个好的方法来执行initialize_mask_to_true()?有时我会做一些感觉丑陋的事情,例如:

mask = ~(df.loc[:, df.columns[0]] == np.nan)
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为它something == np.nan总是错误的,但感觉有一种更干净的方法。

python pandas

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

选择Pandas Multiindex/Multicolumn DataFrame的列表切片

假设我有以下多列Pandas DataFrame:

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', ],
          ['one', 'two', 'one', 'two', 'one', 'two', ]]

tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 6), columns=arrays)

      bar                 baz                 foo          
      one       two       one       two       one       two
0  1.018709  0.295048 -0.735014  1.478292 -0.410116 -0.744684
1  1.388296  0.019284 -1.298793  1.597739  0.044640 -0.040337
2 -0.151763 -0.424984 -1.322985 -0.350483  0.590343 -2.189122
3 -0.221250 -0.449578 -1.512640  0.077380 -0.485380 -0.687565
4 -0.334315  1.790056  0.245414 -0.236784 -0.788226  0.483709
5 -0.943732  1.437968 -0.114556 -1.098798 …
Run Code Online (Sandbox Code Playgroud)

python indexing dataframe pandas

3
推荐指数
2
解决办法
1898
查看次数

标签 统计

python ×4

pandas ×3

dataframe ×1

indexing ×1

logging ×1

pycharm ×1

python-logging ×1