小编tw0*_*000的帖子

使用 Google BigQuery Python 库创建或替换表

我的Python代码是这样的:

from google.cloud import bigquery

client = bigquery.Client(
                        project='my-project',
                        credentials=credentials,
                        )
sql = '''
        CREATE OR REPLACE TABLE `my-project.my_dataset.test` AS
            WITH some_table AS (
              SELECT * FROM `my-project.my_dataset.table_1` 
            ),
            some_other_table AS (
              SELECT id, some_column FROM my-project.my_dataset.table_2
            )
            SELECT * FROM some_table 
            LEFT JOIN some_other_table ON some_table.unique_id=some_other_table.id
        '''

query_job = client.query(sql)

query_job.result()
Run Code Online (Sandbox Code Playgroud)

该查询在 Google BigQuery 控制台 UI 中有效,但在按上述方式从 Python 执行时无效。

我知道通过使用 CREATE OR REPLACE 这是一个“DDL”请求,我无法弄清楚如何从 Python 库执行该请求。您可以在 job.config 中设置目标表,这使您可以创建表,但随后您将无法获得 CREATE 或 REPLACE 功能。

感谢您的任何帮助。

python google-bigquery

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

使用 StratifiedKFold 创建训练/测试/验证分割

我正在尝试StratifiedKFold创建训练/测试/验证分割,以便在非 sklearn 机器学习工作流程中使用。因此,DataFrame 需要被拆分并保持这种状态。

我尝试按照以下方式执行此操作,.values因为我正在传递 pandas DataFrames:

skf = StratifiedKFold(n_splits=3, shuffle=False)
skf.get_n_splits(X, y)

for train_index, test_index, valid_index in skf.split(X.values, y.values):
    print("TRAIN:", train_index, "TEST:", test_index,  "VALID:", valid_index)
    X_train, X_test, X_valid = X.values[train_index], X.values[test_index], X.values[valid_index]
    y_train, y_test, y_valid = y.values[train_index], y.values[test_index], y.values[valid_index]
Run Code Online (Sandbox Code Playgroud)

这失败了:

skf = StratifiedKFold(n_splits=3, shuffle=False)
skf.get_n_splits(X, y)

for train_index, test_index, valid_index in skf.split(X.values, y.values):
    print("TRAIN:", train_index, "TEST:", test_index,  "VALID:", valid_index)
    X_train, X_test, X_valid = X.values[train_index], X.values[test_index], X.values[valid_index]
    y_train, y_test, y_valid = y.values[train_index], y.values[test_index], y.values[valid_index]
Run Code Online (Sandbox Code Playgroud)

我通读了所有sklearn …

python pandas scikit-learn cross-validation data-science

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

使用 requests_html 和 pyppeteer python 发送点击

我正在尝试登录一个网站,单击一个按钮,然后抓取一些数据。该页面必须呈现,因为它全部使用 JavaScript(因此如果您 [例如] 在 Web 浏览器中查看源代码,则不可用)。

除了发送点击的时间外,一切正常。

当我尝试用requests_html包裹发送点击时,它似乎没有做任何事情,尽管没有抛出任何错误。我知道它在很大程度上依赖于pyppeteer,所以我一直试图在文档之间跳转,但整个异步编程的事情对我来说非常混乱。

import asyncio
import requests_html

# Login information
payload = {
    'email': 'example@gmail.com',
    'password': 'Password123'
}

# Start a session
with requests_html.HTMLSession() as s:
    p = s.post('https://www.website.com/login', data=payload)

    # Send the request now that we're logged in
    r = s.get('https://www.website.com/data')

    # Render the JavaScript page so it's accessible
    r.html.render(keep_page=True, scrolldown=5, sleep=5)

    async def click():
        await r.html.page.click(
                                selector='button.showAll', 
                                options={'delay':3, 'clickCount':1},              
                                )

    asyncio.get_event_loop().run_until_complete(click())

    print(r.html.html)
Run Code Online (Sandbox Code Playgroud)

r.html.html包含来自 JS 的渲染 HTML,但不包含单击按钮。我已经确认按钮正在被点击,但我怀疑新页面没有以某种方式被“保存”,那r.html.html就是返回预先点击的页面。 …

python web-scraping

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