Vor*_*Vor 2 python numpy pandas google-bigquery
我刚刚安装了 pandas 和 numpy,对它们没有任何经验。我正在尝试获取类似于您需要传递给 Google BigQuery 的 json 数据结构。https://developers.google.com/bigquery/docs/reference/v2/jobs#configuration.load.encoding
JSON其中 key 是列名,value 是数据类型之一:STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD import numpy as np
import pandas as pd
import config
import boto
from StringIO import StringIO
k = boto.connect_s3(**config.AWS_PARAMS).get_bucket('xxxxxxx').get_key('DATA.csv')
o = StringIO(k.get_contents_as_string())
df = pd.read_csv(o)
def map_dtype(dtype):
if dtype.kind == 'i':
# [int8, int16, int32, int64]
return "INTEGER"
elif dtype.kind == 'u':
# [uint8, uint16, uint32, uint64]
return "INTEGER"
else:
return "STRING"
fields = []
for c, d in zip(df.columns, df.dtypes):
field = {}
field['type'] = map_dtype(d)
field['name'] = c
fields.append(field)
print fields
Run Code Online (Sandbox Code Playgroud)
[{'type': 'INTEGER', 'name': 'VALUE'}, {'type': 'INTEGER', 'name': 'ID'}, {'type': 'STRING', 'name': 'Key'}, {'type': 'STRING', 'name': 'EmailAddress'}]
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我得到了正确的结果。但我不喜欢我的做法。我觉得有一种更简单的方法可以做到这一点。
map_dtype()函数,如您所见,我必须手动将数据类型与 BigQuery 中的字符串表示形式映射For each loop,感觉应该有一种更简单的方法来将 data_type 分配给列。好消息!从 0.13 版开始,pandas 正式(并且实验性地)支持 Google BigQuery。
检查read_gbq,特别是to_gbq(将数据放入 BigQuery):http://pandas.pydata.org/pandas-docs/stable/api.html#google-bigquery。
此处的视频和示例笔记本链接:
(感谢皮尔逊!)