小编Lui*_*uez的帖子

加权直方图

我正在寻求从中迁移matplotlibplotly,但似乎plotly没有很好的集成pandas.例如,我正在尝试制作一个指定箱数的加权直方图:

sns.distplot(df.X, bins=25, hist_kws={'weights':df.W.values},norm_hist=False,kde=False)  
Run Code Online (Sandbox Code Playgroud)

但我没有找到一个简单的方法来做到这一点plotly.如何以直接的方式从pandas.DataFrame使用plotly中生成数据的直方图?

python plot histogram

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

无法使用 gcsfuse 在 GCP 存储桶中写入文件

我使用以下命令在虚拟机上安装了存储桶:

gcsfuse my-bucket /path/to/mount
Run Code Online (Sandbox Code Playgroud)

之后,我可以使用 Pandas 从 Python 中的存储桶中读取文件,但无法写入文件或创建新文件夹。我尝试使用 Python 并使用 sudo 从终端尝试,但出现相同的错误。

我还尝试过使用存储桶中的 key_file:

sudo mount -t gcsfuse -o implicit_dirs,allow_other,uid=1000,gid=1000,key_file=Notebooks/xxxxxxxxxxxxxx10b3464a1aa9.json <BUCKET> <PATH>
Run Code Online (Sandbox Code Playgroud)

当我运行代码时它没有出现错误,但我仍然无法在存储桶中写入。

我也尝试过

gcloud auth login
Run Code Online (Sandbox Code Playgroud)

但仍然有同样的问题。

python fuse bucket google-cloud-platform

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

如何从字典创建两列数据框

我有一本 python 字典

dict = {'Name':value,'Name2':value2,'Name3':value3}
Run Code Online (Sandbox Code Playgroud)

我想从那里创建一个 DataFrame,但如果我尝试这个:

df = pd.DataFrame(dict)
Run Code Online (Sandbox Code Playgroud)

我有两个问题,第一个是字典中并非所有项目都具有相同的值,第二个也是更重要的一个,我想要这种格式的一两列数据框:

名1值
名称1值
名称1值
名称2值
名称2值
NAME3值
NAME3值
NAME3值
NAME3值

而不是:

名称1 [值,值,值]

名称2 [值,值]

Name3 [值,值,值]

python dictionary pandas

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

使用列表理解修改数据框列

我有一个包含大约 90k 个字符串的列表和一个包含多列的数据框,我有兴趣检查列表的字符串是否在 column_1 中,以及它是否在 column_2 中分配了相同的值。

我可以做这个:

for i in range(len(my_list)):
    item = list[i]
    for j in range(len(df)):
         if item == df['column_1'][j]:
             df['column_2'][j] = item
Run Code Online (Sandbox Code Playgroud)

但我宁愿避免嵌套循环

我试过这个

for item in my list:
    if item in list(df['column _1']):
          position = df[df['column_1']==item]].index.values[0]
          df['column_2'][position]  = item
Run Code Online (Sandbox Code Playgroud)

但我认为这个解决方案更慢更难阅读,这个操作可以通过简单的列表理解来完成吗?

编辑。

第二个解决方案要快得多,大约一个数量级。这是为什么?似乎在这种情况下它必须搜索两次以获得马赫:

这里:

if item in list(df['column _1'])
Run Code Online (Sandbox Code Playgroud)

和这里:

possition = df[df['column_1]=='tem]].index.values[0]
Run Code Online (Sandbox Code Playgroud)

我仍然更喜欢更简单的解决方案。

python pandas

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

重命名下载的文件selenium

我正在使用selenium从此页面自动下载csv格式的文件:

https://catalog.data.gov/dataset?tags=crime

这是我正在使用的代码:

profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("browser.download.dir", '/home/luis/Desktop/data/')
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/csv")

driver = webdriver.Firefox(firefox_profile=profile)
driver.get(url)
time.sleep(2)
download_button = driver.find_element_by_xpath('//*[@id="content"]/div[2]/div[2]/section[1]/div[2]/ul/li[14]/div/ul/li[1]/a')
download_button.click()
Run Code Online (Sandbox Code Playgroud)

这里设置了下载文件夹:

profile.set_preference("browser.download.dir", '/home/luis/Desktop/data/')
Run Code Online (Sandbox Code Playgroud)

如何选择保存文件的名称?可以是下载时定义的名称吗?

我的意思是这样的:

For name in names:
    download_button = driver.find_element_by_xpath('//*[@id="content"]/div[2]/div[2]/section[1]/div[2]/ul/li[14]/div/ul/li[{}]/a'.format(name))
    download_button.click()
    save_file_as(name)
Run Code Online (Sandbox Code Playgroud)

python selenium web-scraping

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

是否可以将spacy保留在内存中以减少加载时间?

我想使用spacy和NLP进行在线服务.每次用户发出请求时,我都会调用脚本"my_script.py"

从以下开始:

from spacy.en import English
nlp = English()
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是这两行占用时间超过10秒,是否可以将英语()保留在ram或其他一些选项中以将此加载时间减少到不到一秒?

python nlp spacy

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

如何在python中为t-SNE添加标签

我正在使用 t-SNE 在具有七个特征的数据集上搜索关系。

在此处输入图片说明

我正在使用字典为y绘图上的标签分配颜色:

encoding = {'d0': 0, 'd1': 1, 'd2': 2, 'd3': 3, 'd4': 4, 'd5': 5, 'd6': 6, 'd7': 7}

plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y['label'].apply(lambda x: city_encoding[x]))
plt.show()
Run Code Online (Sandbox Code Playgroud)

这里的问题是不清楚哪种颜色对应哪个标签。数据集实际上有 100 多个标签,所以我不想手动处理它。

在此处输入图片说明

python machine-learning matplotlib

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

在Flask API中返回400错误作为响应

我创建了一个简单的flask应用,并且正在读取来自python的响应:

response = requests.post(url,data=json.dumps(data), headers=headers ) 
data = json.loads(response.text)
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,在某些情况下,我想返回400或500条消息响应。到目前为止,我正在这样做:

abort(400, 'Record not found') 
#or 
abort(500, 'Some error...') 
Run Code Online (Sandbox Code Playgroud)

这确实会在终端上打印消息:

在此处输入图片说明

但是在API响应中,我不断收到500错误响应:

在此处输入图片说明

编辑:

代码的结构如下:

|--my_app
   |--server.py
   |--main.py
   |--swagger.yml
Run Code Online (Sandbox Code Playgroud)

其中server.py具有以下代码:

from flask import render_template
import connexion
# Create the application instance
app = connexion.App(__name__, specification_dir="./")
# read the swagger.yml file to configure the endpoints
app.add_api("swagger.yml")
# Create a URL route in our application for "/"
@app.route("/")
def home():
    """
    This function just responds to the browser URL
    localhost:5000/

    :return:        the rendered template "home.html" …
Run Code Online (Sandbox Code Playgroud)

python api flask

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

将tf-idf与FastText向量一起使用

我对将tf-idf与FastText库一起使用很感兴趣,但是找到了一种处理ngram的逻辑方法。我已经将tf-idf与SpaCy向量一起使用了,以发现以下示例:

但是对于FastText库,我不太清楚,因为它的粒度不太直观,例如EG

对于一般的word2vec方法,我每个单词都有一个矢量,我可以计算该矢量的词频,并相应地除以其值。

但是对于fastText,同一个单词会有几个n-gram

“听最新新闻摘要”将具有由滑动窗口生成的n-gram,例如:

十个孩子...

这些n-gram由模型内部处理,因此当我尝试时:

model["Listen to the latest news summary"] 
Run Code Online (Sandbox Code Playgroud)

我直接得到最终的向量,因此我所需要的是在输入模型之前将文本拆分为n元语法:

model['lis']
model['ist']
model['ten']
Run Code Online (Sandbox Code Playgroud)

然后从那里制作tf-idf,但这似乎都是一种低效的方法,是否存在将tf-idf应用于此类矢量n-gram的标准方法。

python nlp fasttext

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

将 csv 文件发送到 fastAPI 并获取新文件

我有这个非常简单的代码,它获取字典作为输入并返回字典:

app = FastAPI()

class User(BaseModel):
    user_name: dict


@app.post("/")
def main(user: User):
   ## some processing
   return user
Run Code Online (Sandbox Code Playgroud)

我用以下 python 代码调用它:

import requests
import json 
import pandas as pd

df = pd.read_csv("myfile.csv")
data = {}
data["user_name"] = df.to_dict()
headers = {'content-type': 'application/json'}
url = 'http://localhost:8000/'
resp = requests.post(url,data=json.dumps(data), headers=headers )
resp
Run Code Online (Sandbox Code Playgroud)

现在,我想做类似的事情,但我不想通过 python 请求发送数据,而是上传本地文件,将其发送到 API 并获取处理后的 .csv 文件。

现在我有以下代码来上传文件:

from typing import Optional
from fastapi import FastAPI
from fastapi import FastAPI, File, UploadFile
from pydantic import BaseModel
from typing import List …
Run Code Online (Sandbox Code Playgroud)

python api pandas fastapi

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