小编Max*_*wer的帖子

Pythonic将字典转换为namedtuple的方法,还是另一个Hashable dict-like?

我有一个字典,如:

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为namedtuple.我目前的方法是使用以下代码

namedTupleConstructor = namedtuple('myNamedTuple', ' '.join(sorted(d.keys())))
nt= namedTupleConstructor(**d)
Run Code Online (Sandbox Code Playgroud)

哪个产生

myNamedTuple(a = 1,b = 2,c = 3,d = 4)

这对我来说很好(我认为),但我错过了内置如...

nt = namedtuple.from_dict() ?
Run Code Online (Sandbox Code Playgroud)

更新:正如评论中所讨论的那样,我想将我的字典转换为一个命名元组的原因是它变得可以清洗,但仍然像dict一样可用.

python dictionary namedtuple

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

错误 - 替换有[x]行,数据有[y]

我在数据框("df")中有一个数字列("值"),我想根据"值"生成一个新列("valueBin").我有以下条件代码来定义df $ valueBin:

df$valueBin[which(df$value<=250)] <- "<=250"
df$valueBin[which(df$value>250 & df$value<=500)] <- "250-500"
df$valueBin[which(df$value>500 & df$value<=1000)] <- "500-1,000"
df$valueBin[which(df$value>1000 & df$value<=2000)] <- "1,000 - 2,000"
df$valueBin[which(df$value>2000)] <- ">2,000"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"错误$<-.data.frame(*tmp*,"valueBin",值= c(NA,NA,NA,:替换有6530行,数据有6532"

每个元素df$value都应符合我的一个which()陈述.没有遗漏的值df$value.虽然我只运行第一个条件语句(<= 250),但我得到完全相同的错误,"...replacement has 6530 rows..."尽管有少于6530条记录值<= 250,而值永远不是NA.

当使用aggregate()是一个bug时,这个SO链接注意到类似的错误,但它建议安装RI版本.此外,错误报告称其已修复. R聚合错误:"替换有<foo>行,数据有<bar>"

这个SO链接似乎与我的问题更相关,这里的问题是他/她的条件逻辑的问题导致更换数组的元素生成更少.我想这也一定是我的问题,并且首先想到我必须有一个"<="而不是"<",反之亦然,但在检查后我很确定它们都是正确的,以涵盖每个值"价值"没有重叠. '[< - .data.frame'中的R错误...替换有#项,需要#

r dataframe

34
推荐指数
3
解决办法
12万
查看次数

使用python/selenium保存完整的网页(包括css,图像)

我正在使用Python/Selenium将基因序列提交到在线数据库,并希望保存我得到的整个结果页面.下面的代码可以让我得到我想要的结果:

from selenium import webdriver

URL = 'https://blast.ncbi.nlm.nih.gov/Blast.cgi?PROGRAM=blastx&PAGE_TYPE=BlastSearch&LINK_LOC=blasthome'
SEQUENCE = 'CCTAAACTATAGAAGGACAGCTCAAACACAAAGTTACCTAAACTATAGAAGGACAGCTCAAACACAAAGTTACCTAAACTATAGAAGGACAGCTCAAACACAAAGTTACCTAAACTATAGAAGGACAGCTCAAACACAAAGTTACCTAAACTATAGAAGGACA' #'GAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGA'
CHROME_WEBDRIVER_LOCATION = '/home/max/Downloads/chromedriver' # update this for your machine

# open page with selenium
# (first need to download Chrome webdriver, or a firefox webdriver, etc)
driver = webdriver.Chrome(executable_path=CHROME_WEBDRIVER_LOCATION)
driver.get(URL)
time.sleep(5)

# enter sequence into the query field and hit 'blast' button to search
seq_query_field = driver.find_element_by_id("seq")
seq_query_field.send_keys(SEQUENCE)

blast_button = driver.find_element_by_id("b1")
blast_button.click()
time.sleep(60)
Run Code Online (Sandbox Code Playgroud)

那时我有一个页面,我可以手动点击"另存为",并获得一个本地文件(带有相应的image/js资产文件夹),让我可以在本地查看整个返回的页面(减去从中动态生成的内容)向下滚动页面,这很好).我假设有一种简单的方法可以模仿python/selenium中的"另存为"功能,但还没有找到.保存下面页面的代码只保存html,并没有给我留下看起来像在Web浏览器中看到的本地文件,图像等.

content = driver.page_source
with open('webpage.html', 'w') as f:
    f.write(content)
Run Code Online (Sandbox Code Playgroud)

我也在SO上找到了这个问题/答案,但是接受的答案只是打开了"另存为"框,并没有提供点击它的方法(正如两位评论者指出的那样) …

python selenium bioinformatics web-crawler

17
推荐指数
2
解决办法
2027
查看次数

Sklearn Pipeline - 如何在自定义Transformer(而不是Estimator)中继承get_params

我有scikit-learn中的管道,它使用我定义的自定义变换器,如下所示:

class MyPipelineTransformer(TransformerMixin):
Run Code Online (Sandbox Code Playgroud)

它定义了函数

__init__, fit() and transform()
Run Code Online (Sandbox Code Playgroud)

但是,当我在RandomizedSearchCV中使用管道时,我收到以下错误:

'MyPipelineTransformer'对象没有属性'get_params'

我在线阅读(例如下面的链接)

(Python - sklearn)如何通过gridsearchcv将参数传递给自定义的ModelTransformer类

http://scikit-learn.org/stable/auto_examples/hetero_feature_union.html

我可以通过继承BaseEstimator来获取'get_params',而不是仅仅继承TransformerMixin的当前代码.但我的变压器不是估算器.从BaseEstimator继承非估计量是否有任何不足之处?或者这是为管道中的任何变压器(估算器或非估算器)获取get_params的推荐方法吗?

python inheritance pipeline scikit-learn

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

将Spacy Parser应用于具有多处理功能的Pandas DataFrame

说我有一个数据集,比如

iris = pd.DataFrame(sns.load_dataset('iris'))
Run Code Online (Sandbox Code Playgroud)

我可以使用Spacy和.apply将字符串列解析为标记(我的真实数据集当然每个条目有> 1个字/标记)

import spacy # (I have version 1.8.2)
nlp = spacy.load('en')
iris['species_parsed'] = iris['species'].apply(nlp)
Run Code Online (Sandbox Code Playgroud)

结果:

   sepal_length   ... species    species_parsed
0           1.4   ... setosa          (setosa)
1           1.4   ... setosa          (setosa)
2           1.3   ... setosa          (setosa)
Run Code Online (Sandbox Code Playgroud)

我还可以使用这个方便的多处理功能(感谢这篇博文)在数据帧上并行执行大多数任意应用函数:

from multiprocessing import Pool, cpu_count
def parallelize_dataframe(df, func, num_partitions):

    df_split = np.array_split(df, num_partitions)
    pool = Pool(num_partitions)
    df = pd.concat(pool.map(func, df_split))

    pool.close()
    pool.join()
    return df
Run Code Online (Sandbox Code Playgroud)

例如:

def my_func(df):
    df['length_of_word'] = df['species'].apply(lambda x: len(x))
    return df …
Run Code Online (Sandbox Code Playgroud)

python nlp multiprocessing spacy

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

无法让 VSCode/Python 调试器找到我的项目模块

我有一个项目,正在尝试调试我的main.py. 我真的很困惑为什么我在运行调试器时从文件顶部的导入中(仅​​)收到以下错误:

Exception has occurred: ModuleNotFoundError
No module named 'bbb'
  File "/Users/maxepstein/myproject/bbb/train/__main__.py", line 8, in <module>
    from bbb.mysubfolder.myfile import myfunction
Run Code Online (Sandbox Code Playgroud)

我的项目文件夹结构,如这些打印语句所示(如调试器所示)确认我的“bbb”模块存在,并且有一个 __init__.py:

import os
print(os.getcwd())
print(os.listdir())
print(os.listdir('bbb'))

/Users/maxepstein/myproject
['requirements.txt', 'bbb', 'resources', '__init__.py', 'readme.md', 'results', '.gitignore', '.git', '.vscode', 'bbenv']
['config', 'tests', '__init__.py', 'utils', 'predict', 'train']
Run Code Online (Sandbox Code Playgroud)

我试图调试为“调试当前文件 - 集成终端”,下面是我的 debug settings.json 中适用的调试设置。在网上搜索后,我真的认为添加"cwd": "/Users/maxepstein/myproject"以下内容是我的解决方案,但没有帮助。

"version": "0.2.0",
"configurations": [
    {
        "name": "Python: Current File (Integrated Terminal)",
        "type": "python",
        "request": "launch",
        "program": "${file}",
        "console": "integratedTerminal",
        "cwd": "/Users/maxepstein/myproject"
    }
Run Code Online (Sandbox Code Playgroud)

python debugging visual-studio-debugging visual-studio-code

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

在R/Kable()HTML表中获取列名称

我正在尝试从R数据框生成HTML表输出,并且无法获取一些长列名称来换行多行标题行.这是我当前代码和输出的最小可重现示例:

library(datasets)
library(knitr)
library(kableExtra)

data(iris)
Run Code Online (Sandbox Code Playgroud)

将前5行iris表输出为html格式表:

sink('my_file_path.html')
names_spaced <- c('Sepal Length', 'Sepal Width', 'Petal Length', 
                  'Petal Width Long Col Name', 'Species')

kable(head(iris), 
      format='html', 
      digits=1, 
      row.names=FALSE, 
      align='lccccc', 
      col.names = names_spaced)

sink()
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中打开保存的文件时,我的标题行只是一行,但我需要将这些单词换行到一行或两行(因此'Petal Width Long Col Name').

kable_styling函数有一个参数,bootstrap_options但似乎没有我需要的东西.我也尝试\n在列名中插入但无济于事.

非常感谢解决方案.不反对使用xtable包而不是kable/ knitr如果这是解决方案的一部分.

r html-table xtable knitr

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

如何从python中的拟合scikit-survival模型解释.predict()的输出?

我很困惑如何解释scikit-survival中.predict拟合CoxnetSurvivalAnalysis模型的输出.我已经阅读了scikit-survival中的笔记本生存分析介绍和API参考,但无法找到解释.以下是导致我混淆的最小例子:

import pandas as pd
from sksurv.datasets import load_veterans_lung_cancer
from sksurv.linear_model import CoxnetSurvivalAnalysis

# load data
data_X, data_y = load_veterans_lung_cancer()

# one-hot-encode categorical columns in X
categorical_cols = ['Celltype', 'Prior_therapy', 'Treatment']

X = data_X.copy()
for c in categorical_cols:
    dummy_matrix = pd.get_dummies(X[c], prefix=c, drop_first=False)
    X = pd.concat([X, dummy_matrix], axis=1).drop(c, axis=1)

# display final X to fit Cox Elastic Net model on
del data_X
print(X.head(3))
Run Code Online (Sandbox Code Playgroud)

所以这是进入模型的X:

   Age_in_years  Celltype  Karnofsky_score  Months_from_Diagnosis  \
0          69.0  squamous …
Run Code Online (Sandbox Code Playgroud)

python machine-learning survival-analysis scikit-survival

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

如何将OneHotEncoder用于多列并自动删除每列的第一个虚拟变量?

这是包含3个col和3行的数据集

名称组织部

Manie ABC2 FINANCE

Joyce ABC1 HR

Ami NSV2 HR

这是我的代码:

现在它很好,直到这里,我如何删除每个的第一个虚拟变量列?

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('Data1.csv',encoding = "cp1252")
X = dataset.values


# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X_0 = LabelEncoder()
X[:, 0] = labelencoder_X_0.fit_transform(X[:, 0])
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])

onehotencoder = OneHotEncoder(categorical_features = "all")
X …
Run Code Online (Sandbox Code Playgroud)

python machine-learning pandas scikit-learn

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

langchain CharacterTextSplitter 的 chunk_size 参数有什么作用?

我的默认假设是该chunk_size参数将为该方法产生的块/分割的大小设置上限split_text,但这显然是不对的:

from langchain.text_splitter import RecursiveCharacterTextSplitter, CharacterTextSplitter

chunk_size = 6
chunk_overlap = 2

c_splitter = CharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)

text = 'abcdefghijklmnopqrstuvwxyz'

c_splitter.split_text(text)
Run Code Online (Sandbox Code Playgroud)

打印:['abcdefghijklmnopqrstuvwxyz'],即比 更大的单个块chunk_size=6。

所以我知道它没有将文本分割成块,因为它从未遇到分隔符。但问题是,even 在做什么chunk_size?

langchain.text_splitter.CharacterTextSplitter 我检查了此处的文档页面,但没有看到这个问题的答案。我询问了“可修复的”chat-with-langchain-docs 搜索功能,但得到了答案“CharacterTextSplitter 的 chunk_size 参数决定了每个文本块中的最大字符数。”...这是不正确的,因为上面的代码示例显示了。

python text nlp machine-learning langchain

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