Python 2.7 在datetime64数据类型上使用Google DataLab时出现KeyError
我正在使用谷歌数据实验室查询BigQuery,并将该数据用于RNN。我试图将大部分数据转换为数字格式,但收到“日期”列的一个keyrerror。如果我将其保留为字符串,我的代码可以工作,但我需要date字段保持RNN的datetime数据类型。我的代码和错误发布在下面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
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这很有效!它甚至可以加速对数据帧的查询。谢谢很高兴它起作用了,移动到一个答案,这样就可以标记为“已解决”。