【发布时间】:2017-02-03 06:13:10
【问题描述】:
我目前正在从 quandl 收集数据并保存为列表列表。该列表看起来像这样(价格数据):
['2', 1L, datetime.date(1998, 1, 2), datetime.datetime(2016, 9, 26, 1, 35, 3, 830563), datetime.datetime(2016, 9, 26, 1, 35, 3, 830563), '82.1900', '83.6200', '81.7500', '83.5000', '28.5183', 1286500.0]
这通常是大约 5000 个列表中的 1 个,Quandl 每隔一段时间就会吐回一些不喜欢被保存到数据库中的 NaN 值。
['2', 1L, datetime.date(1998, 1, 2), datetime.datetime(2016, 9, 26, 1, 35, 3, 830563), datetime.datetime(2016, 9, 26, 1, 35, 3, 830563), 'nan', 'nan', 'nan', 'nan', 'nan', 0]
遍历列表以将“nan”值更改为零的最有效方法是什么?
我知道我可以做这样的事情,但它似乎相当低效。此操作需要对 11 个不同的值 * 5000 个不同的日期 * 500 家公司执行:
def screen_data(data):
new_data = []
for d in data:
new_list = []
for x in d:
new_value = x
if math.isNan(x):
new_value = 0
new_list.append(new_value)
new_data.append(new_list)
return new_data
我会对任何可以缩短时间的解决方案感兴趣。我知道 DataFrames 可能会起作用,但不确定它如何解决 NaN 问题。
或者,如果有一种方法可以在 SQLServer5.6 数据库中包含 NaN 值以及浮点数,那么更改数据库也是一个可行的选择。
【问题讨论】:
-
这在 codereview.stackexchange.com 上可能更好,但你所描述的听起来你必须检查每个列表中的每个值。
标签: python performance list mysql-python nan