Python 2.7 在datetime64数据类型上使用Google DataLab时出现KeyError

Python 2.7 在datetime64数据类型上使用Google DataLab时出现KeyError,python-2.7,google-bigquery,google-cloud-datalab,Python 2.7,Google Bigquery,Google Cloud Datalab,我正在使用谷歌数据实验室查询BigQuery,并将该数据用于RNN。我试图将大部分数据转换为数字格式,但收到“日期”列的一个keyrerror。如果我将其保留为字符串,我的代码可以工作,但我需要date字段保持RNN的datetime数据类型。我的代码和错误发布在下面 import datalab.bigquery as bq import seaborn as sns import pandas as pd import numpy as np import tensorflow as tf

我正在使用谷歌数据实验室查询BigQuery,并将该数据用于RNN。我试图将大部分数据转换为数字格式,但收到“日期”列的一个keyrerror。如果我将其保留为字符串,我的代码可以工作,但我需要date字段保持RNN的datetime数据类型。我的代码和错误发布在下面

import datalab.bigquery as bq
import seaborn as sns
import pandas as pd
import numpy as np
import tensorflow as tf
import shutil

%%javascript
$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')

%%sql --m log_data
SELECT resource, place_id, CAST(end_time AS TIMESTAMP) AS Date, device, device_os, device_os_version, CAST(latency AS FLOAT) AS Latency,
CAST(megacycles AS FLOAT) AS Megacycles, method, CAST(response_size AS FLOAT) AS Response_Size, CAST(cost AS FLOAT) AS Cost, status,
device_brand, device_family, browser_version, app, ua_parse
FROM [project:app_logs_data] 
WHERE DATE(CAST(end_time AS DATE)) >='2018-03-09' AND DATE(CAST(end_time AS DATE)) <='2018-03-10'
GROUP BY resource, place_id, Date, device, device_os, device_os_version, Latency, Megacycles, method,
        Response_size, Cost, status, device_brand, device_family, browser_version, app, ua_parse

logs = bq.Query(log_data).to_dataframe()
logs['Date'] = pd.to_datetime(logs['Date'])
logs['resource'].apply(str)

logs.dtypes
resource                     object
place_id                     object
Date                 datetime64[ns]
device                       object
device_os                    object
device_os_version            object
Latency                     float64
Megacycles                  float64
method                       object
Response_Size               float64
Cost                        float64
status                       object
device_brand                 object
device_family                object
browser_version              object
app                          object
ua_parse                     object
dtype: object

def handle_non_numerical_data(logs):
    columns = logs.columns.values

    for column in columns:
        text_digit_vals = {}
        def convert_to_int(val):
            return text_digit_vals[val]
        if logs[column].dtype != np.int64 and \
                logs[column].dtype != np.float64 and logs[column].dtype != np.datetime64:
            column_contents = logs[column].values.tolist()
            unique_elements = set(column_contents)
            x = 0
            for unique in unique_elements:
                if unique not in text_digit_vals:
                    text_digit_vals[unique] = x
                    x+=1
            logs[column] = list(map(convert_to_int, logs[column]))
    return logs

logs = handle_non_numerical_data(logs)


KeyErrorTraceback (most recent call last)
<ipython-input-8-27437e47a873> in <module>()
     17     return logs
     18 
---> 19 logs = handle_non_numerical_data(logs)

<ipython-input-8-27437e47a873> in handle_non_numerical_data(logs)
     14                     text_digit_vals[unique] = x
     15                     x+=1
---> 16             logs[column] = list(map(convert_to_int, logs[column]))
     17     return logs
     18 

<ipython-input-8-27437e47a873> in convert_to_int(val)
      5         text_digit_vals = {}
      6         def convert_to_int(val):
----> 7             return text_digit_vals[val]
      8         if logs[column].dtype != np.int64 and                 logs[column].dtype != np.float64 and logs[column].dtype != np.datetime64:
      9             column_contents = logs[column].values.tolist()

KeyError: Timestamp('2018-03-09 00:00:00')
将datalab.bigquery导入为bq
导入seaborn作为sns
作为pd进口熊猫
将numpy作为np导入
导入tensorflow作为tf
进口舒蒂尔
%%javascript
$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')
%%sql--m日志数据
选择resource、place_id、CAST(结束时间作为时间戳)作为日期、device、device_os、device_os版本、CAST(延迟作为浮点)作为延迟,
转换(兆循环作为浮点)作为兆循环,方法,转换(响应大小作为浮点)作为响应大小,转换(成本作为浮点)作为成本,状态,
设备品牌、设备系列、浏览器版本、应用程序、ua
来自[项目:应用程序日志数据]
其中日期(CAST(结束时间为日期))>='2018-03-09'和日期(CAST(结束时间为日期))19日志=处理非数字数据(日志)
在处理非数值数据(日志)
14文本\数字\数值[唯一]=x
15 x+=1
--->16日志[列]=列表(映射(转换为int,日志[列])
17返回日志
18
在转换为整数时(val)
5文本\数字\ VAL={}
6 def将_转换为_int(val):
---->7返回文本\数字\ val[val]
8如果记录[列].dtype!=np.int64和日志[列].dtype!=np.float64和日志[列].dtype!=np.datetime64:
9 column_contents=logs[column].values.tolist()
KeyError:时间戳('2018-03-09 00:00:00')

数据实验室。*
是一个不推荐使用的库,您应该切换到使用
google.datalab.
,使用
%%bq
而不是
%%sql
。查看新库中是否已修复该问题。

数据实验室。*
是一个不推荐使用的库,您应该切换到使用
google.datalab.
,并使用
%%bq
而不是
%%sql
。查看新库中是否已修复此问题。

数据实验室。*是一个不推荐使用的库,您应该切换到使用
google.datalab.*
,以及
%%bq
而不是
%%sql
。“看看新图书馆是否已经修复了这个问题。”叶利伟说,谢谢你的帮助。我正在学习Udemy课程,但使用的是我自己的数据集。这些是他们正在使用的图书馆。我将加载这些库,看看这是否解决了这个问题。@yelsayed这很有效!它甚至可以加速对数据帧的查询。谢谢很高兴它起作用了,移动到一个答案,以便将其标记为已解决。
datalab.
是一个不推荐使用的库,您应该切换到使用
google.datalab.
,并使用
%%bq
而不是
%%sql
。“看看新图书馆是否已经修复了这个问题。”叶利伟说,谢谢你的帮助。我正在学习Udemy课程,但使用的是我自己的数据集。这些是他们正在使用的图书馆。我将加载这些库,看看这是否解决了这个问题。@yelsayed这很有效!它甚至可以加速对数据帧的查询。谢谢很高兴它起作用了,移动到一个答案,这样就可以标记为“已解决”。