合并来自BigQuery的pandas datframes时,TypeError:无法散列的类型:'numpy.ndarray'

时间:2019-08-17 22:28:05

标签: python-3.x pandas numpy google-bigquery

我从BigQuery上的开放数据Github数据创建了BigQuery数据集。

我现在将这些数据(两个不同的表)作为数据帧导入到熊猫中,并且工作正常。当我在连接列上调用“类型”时,它们都以pd.Series出现。

这是我的剧本:

from google.cloud import bigquery
from google.oauth2 import service_account
from google.cloud import bigquery_storage_v1beta1
from sklearn.model_selection import train_test_split
import pandas as pd

credentials = service_account.Credentials.from_service_account_file(
    'XXXXXXXXX.json')
project_id = 'XXXXXX'
client = bigquery.Client(credentials= credentials, project=project_id)

bqstorageclient = bigquery_storage_v1beta1.BigQueryStorageClient(
    credentials=credentials
)


language_query = """
  SELECT repo_name, Language, Bytes,
  CASE 
  when LOWER(Language) NOT IN ('javascript', 'python', 'ruby', 'java'
                        , 'php', 'c++', 'css', 'c#', 'go'
                        , 'c', 'typescript', 'shell', 'swift'
                        , 'scala', 'objective-c') then 'Other'
  else Language END AS language_category
  FROM github_project.langauges

  LIMIT 1000"""

language_query_dataframe = (
    client.query(language_query)
    .result()
    .to_dataframe(bqstorage_client=bqstorageclient)
)

commit_query = """
    SELECT Commit, Author, DateSeconds, repo_name
    FROM github_project.commits
    LIMIT 1000
    """

commit_query_dataframe = (
    client.query(commit_query)
    .result()
    .to_dataframe(bqstorage_client=bqstorageclient)
)

merged_data = pd.merge(commit_query_dataframe, language_query_dataframe, on='repo_name')

最后一行,

merged_data = pd.merge(commit_query_dataframe, language_query_dataframe, on='repo_name')

引发错误:

TypeError: unhashable type: 'numpy.ndarray'

数组从哪里来?我找不到答案,也无法理解为什么合并两个系列应该可以解决这个问题。

任何帮助都会很棒。预先感谢

1 个答案:

答案 0 :(得分:1)

我发现了问题-它在BigQuery方面。 repo_name是BigQuery表中的一个数组,我想念它,所以在我的原始查询中使用UNNEST解决了这个问题。

留给遇到此问题的任何人。检查并确保您的联接列在BigQuery上的类型不是“重复”。