当前位置: 首页 > 知识库问答 >
问题:

为什么pandas.to_gbq函数不尊重表模式中的列顺序?

耿联
2023-03-14

我想使用数据框将熊猫数据框上传到大查询。调用函数。

我指定一个table_schema参数来强制BigQuery中的特定列顺序(这可能与Dataframe不同)。

所以我用例如:

table_schema = [{'name': 'col1', 'type': 'INT64'}, 
{'name': 'col2', 'type': 'STRING'}, 
{'name': 'col3', 'type': 'STRING'}, 
{'name': 'col4', 'type': 'STRING'}, 
{'name': 'col5', 'type': 'STRING'}, 
{'name': 'col6', 'type': 'FLOAT64'}, 
{'name': 'col7', 'type': 'INT64'}, 
{'name': 'col8', 'type': 'FLOAT64'}]

Dataframe.to_gbq(destination_table, if_exists='replace', table_schema=table_schema)

数据帧中的列顺序是:Col1、Col3、Col4、Col5、Col2、Col6、Col7、Col8

工作做得正确。

但是当我检查Big Query中创建(或替换)destination_table的表模式时,列顺序是:Col1, Col3, Col4, Col5, Col2, Col6, Col7, Col8

(数据帧的顺序,而不是表_架构的顺序)

难道不应该尊重表架构中指定的顺序吗?

如果没有,有没有办法强制这样做?

共有1个答案

益明朗
2023-03-14

通过按所需的顺序对数据框的列进行索引,对其重新排序

ordered_columns = [c['name'] for c in table_schema]

Dataframe[ordered_columns].to_gbq(destination_table, if_exists='replace', table_schema=table_schema)
 类似资料:
  • 问题内容: 原始问题: 当我的JavaScript调用的功能在页面下方而不是在调用页面的下方定义时,JSHint会抱怨。但是,我的页面是用于游戏的,在下载全部内容之前,不会调用任何函数。那么为什么订单功能出现在我的代码中很重要? 我在里面吟。看来我需要花另一天的时间才能重新排序六千行代码。使用javascript的学习曲线一点也不陡峭,但是非常糟糕。 问题答案: tl; dr 如果在加载完成之前不

  • 问题内容: 假设我有一个条件: 现在假设那很可能会收到一个真实的值,为什么我要关心左边的那个? 如果将它们都放在方括号中,那么我(作为代码的程序员)知道双方都是需要的。 问题是,我的教授在他的演讲笔记上写道,我应该在左边加上“更可能的变量以得到一个真”。 有人可以解释一下好处吗?好吧,我把它放在左边…我正在获得什么?运行 ? 问题答案: 它不只是在左侧选择最可能的条件。您也可以在左侧设置一个安全门

  • 我正在学习哈斯克尔,并试图实现卢恩算法。 我创建了一个助手函数: 此函数工作正常。如果我尝试以的形式运行它,它将返回,这是预期的结果。 然后我尝试实现luhn算法: 这是算法的一部分,我会将其更改为返回一个,但我尝试按此方式运行,它会给出: ***例外情况:主要。hs:92:1-30:函数luhn中的非穷举模式 为什么会这样?

  • 问题内容: W3指定表列(带有元素)仅允许使用四个CSS规则- 边框,背景,宽度和可见性。 有人知道这个决定的原因吗?如果可以使用边框和背景,为什么不使用字体和颜色呢? 问题答案: IanHixie在这里详细解释:为什么只有四个属性应用于表列的奥秘。相关报价: 文本的颜色取决于其元素的“颜色”属性。除非指定,否则“ color”属性(基本上)默认为“ inherit”,这意味着“采用父元素的值”。

  • 问题内容: 例: Python是(非常)面向对象的,我不理解为什么对象不继承“ len”功能。另外,我一直在尝试错误的解决方案,因为它对我来说似乎是合乎逻辑的 问题答案: Guido的解释在这里: 首先,出于HCI的原因,我选择len(x)而不是x.len()(def len ()来得晚)。实际上,HCI有两个相互交织的原因: (a)对于某些运算,前缀表示法比后缀读得更好-前缀(和infix!)运