Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从多个XDB结果系列构建数据帧_Python_Pandas_Influxdb - Fatal编程技术网

Python 从多个XDB结果系列构建数据帧

Python 从多个XDB结果系列构建数据帧,python,pandas,influxdb,Python,Pandas,Influxdb,我正在使用influxdbPython库获取数据库中的系列列表。大约有20k系列。然后,我尝试从该系列中构建一个Pandasdataframe。我的时间是15秒(我想去掉纳秒,我想知道为什么XDB的Python库中有文档记录的get\u list_series()调用在我尝试过的所有版本中都不存在,但这些都是其他问题…);我想以一个大数据帧结束 代码如下: from influxdb import DataFrameClient .... get series list ... temp_df

我正在使用
influxdb
Python库获取数据库中的系列列表。大约有20k系列。然后,我尝试从该系列中构建一个
Pandas
dataframe
。我的时间是15秒(我想去掉纳秒,我想知道为什么XDB的Python库中有文档记录的
get\u list_series()
调用在我尝试过的所有版本中都不存在,但这些都是其他问题…);我想以一个大数据帧结束

代码如下:

from influxdb import DataFrameClient
.... get series list ...

temp_df = pd.DataFrame()
for series in series_list:
    df = dfclient.query('select time,temp from {} where "series" = \'{}\''.format(location, temp))[location].asfreq('15S')
    df.columns = [series]

    if temp_df.empty:
        temp_df = df
    else:
        temp_df = temp_df.join(df, how='outer')
这开始很好,但在几百个系列之后,速度很快减慢,几乎停了下来。我确信我没有用正确的方式使用熊猫,我希望你能告诉我如何用正确的方式使用熊猫

值得一提的是,我在功能相对强大的硬件上运行了它(这就是为什么我认为我这样做是错误的)


还有一件事:我从XDB中提取的每个序列的时间序列可能与所有其他序列不同,这就是我使用
join
的原因。我想以一个DF结束,每个系列都有一列,datetimes在索引中进行了适当的排序;join就是这样做的。

我对Pandas或Python如何分配内存没有深入的了解,但在其他语言中,在循环中执行新系列的join(
temp_df=temp_df.join(df,how='outer')
)通常会导致这样的结果。您是否可以a)在循环开始之前预先分配一个大数据帧,将其填充为NAN或类似内容,并在循环中覆盖列内容?或者b)使用循环构建数据帧列表,然后在循环之后构建一个大小、形状和类型正确的大型数据帧,并使用列表中的dfs填充它?只需再次查看Pandas文档-df.join()将接受数据帧列表-您是否尝试过使用循环构建数据帧列表,然后在循环之后,调用df.join()?@Jason-是的。这对系统来说也太过分了。只是数据太多了。我通过一次比较数据块就解决了这个问题。也许将来我可以先使用您为数据帧分配内存的方法。这将是一个折衷方案,因为我必须在分配内存之前找到最长的时间序列,这将需要遍历所有数千个序列。谢谢你提供的信息和帮助。谢谢你一直通知我。有趣的问题。祝你好运我对Pandas或Python如何分配内存没有深入的了解,但在其他语言中,在循环中连接新系列(
temp_df=temp_df.join(df,how='outer')
)通常会导致这样的结果。您是否可以a)在循环开始之前预先分配一个大数据帧,将其填充为NAN或类似内容,并在循环中覆盖列内容?或者b)使用循环构建数据帧列表,然后在循环之后构建一个大小、形状和类型正确的大型数据帧,并使用列表中的dfs填充它?只需再次查看Pandas文档-df.join()将接受数据帧列表-您是否尝试过使用循环构建数据帧列表,然后在循环之后,调用df.join()?@Jason-是的。这对系统来说也太过分了。只是数据太多了。我通过一次比较数据块就解决了这个问题。也许将来我可以先使用您为数据帧分配内存的方法。这将是一个折衷方案,因为我必须在分配内存之前找到最长的时间序列,这将需要遍历所有数千个序列。谢谢你提供的信息和帮助。谢谢你一直通知我。有趣的问题。祝你好运