【问题标题】:combining ranges for pandas (NumPy? core python?) indexing组合熊猫(NumPy?核心python?)索引的范围
【发布时间】:2014-08-12 13:34:03
【问题描述】:

我正在加载大小与我的内存限制相当的数据,因此我意识到高效索引而不是制作副本。我需要处理第 3:8 和第 9 列:(也有标签),但组合范围似乎不起作用。重新排列基础数据中的列是不必要的昂贵(IO 操作)。引用两个数据框并将它们组合起来听起来也像是会复制的东西。有什么有效的方法来做到这一点?

import numpy as np
import pandas as pd

data = pd.read_stata('S:/data/controls/lasso.dta')
X = pd.concat([data.iloc[:,3:8],data.iloc[:,9:888]])

顺便说一句,如果我只能读取一半的数据(甚至是随机的一半),那将有所帮助,我不会再打开原始数据并为此保存另一个较小的副本。

【问题讨论】:

    标签: python numpy pandas indexing


    【解决方案1】:
    import numpy as np
    import pandas as pd
    
    data = pd.read_stata('S:/data/controls/lasso.dta')
    cols = np.zeros(len(data.columns), np.dtype=bool)
    cols[3:8] = True
    cols[9:888] = True
    X = data.iloc[:, cols]
    del data
    

    这仍然是一个副本(但只有一个......)。对于这种形状,似乎无法返回视图而不是副本 (source)。

    另一个建议是将.dta 文件转换为.csv 文件(howto)。 Pandas read_csv 更加灵活:您可以指定您感兴趣的列 (usecols),以及要读取的行数 (nrows)。不幸的是,这需要一个文件副本。

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 2015-01-20
      • 2020-02-04
      • 2014-06-16
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 2023-03-30
      • 2017-12-23
      相关资源
      最近更新 更多