我有一个字典,如:
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一样可用.
我在数据框("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错误...替换有#项,需要#
我正在使用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上找到了这个问题/答案,但是接受的答案只是打开了"另存为"框,并没有提供点击它的方法(正如两位评论者指出的那样) …
我有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的推荐方法吗?
说我有一个数据集,比如
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) 我有一个项目,正在尝试调试我的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) 我正在尝试从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如果这是解决方案的一部分.
我很困惑如何解释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) 这是包含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) 我的默认假设是该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 ×8
nlp ×2
r ×2
scikit-learn ×2
dataframe ×1
debugging ×1
dictionary ×1
html-table ×1
inheritance ×1
knitr ×1
langchain ×1
namedtuple ×1
pandas ×1
pipeline ×1
selenium ×1
spacy ×1
text ×1
web-crawler ×1
xtable ×1