TypeError: unhashable type: 'numpy.ndarray' 合并来自 BigQuery 的 pandas 数据帧时
Posted
技术标签:
【中文标题】TypeError: unhashable type: \'numpy.ndarray\' 合并来自 BigQuery 的 pandas 数据帧时【英文标题】:TypeError: unhashable type: 'numpy.ndarray' when merging pandas datframes from BigQueryTypeError: unhashable type: 'numpy.ndarray' 合并来自 BigQuery 的 pandas 数据帧时 【发布时间】:2019-08-17 22:28:05 【问题描述】:我从 BigQuery 上的开放数据 Github 数据创建了一个 BigQuery 数据集。
我现在将这些数据(两个不同的表)作为数据框带入 pandas,它工作正常。当我在我的联接列上调用“类型”时,它们都以 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'
数组来自哪里?我找不到答案,也不明白为什么合并两个系列会解决这个问题。
任何帮助都会很棒。提前致谢
【问题讨论】:
commit_query_dataframe
和language_query_dataframe
的形状是什么?
@MdJohirulIslam np.shape 为两者提供 (1000,4) 并且 type 为 repo_name 提供'pandas.core.series.Series'
【参考方案1】:
我发现了问题——它在 BigQuery 方面。 repo_name 是 BigQuery 表中的一个数组,我错过了它,因此在我的原始查询中使用 UNNEST 解决了这个问题。
留给遇到这种情况的其他人。检查并确保您的联接列在 BigQuery 上不是“重复”类型。
【讨论】:
很酷,你想通了。给别人留下这样的答案很有帮助。以上是关于TypeError: unhashable type: 'numpy.ndarray' 合并来自 BigQuery 的 pandas 数据帧时的主要内容,如果未能解决你的问题,请参考以下文章
如何克服 TypeError: unhashable type: 'list'
Python debug——TypeError unhashable type(list/set/dict)
这里的正确语法是啥?获取类型 TypeError: unhashable type: 'dict
Python "TypeError: unhashable type: 'slice'" 用于编码分类数据