相关疑难解决方法(0)

在大熊猫中为大型数据集排序

我想按给定列对数据进行排序,特别是p值.但是,问题是我无法将整个数据加载到内存中.因此,以下内容不起作用或者仅适用于小型数据集.

data = data.sort(columns=["P_VALUE"], ascending=True, axis=0)
Run Code Online (Sandbox Code Playgroud)

是否有一种快速方法可以按给定列对数据进行排序,该列只考虑块并且不需要在内存中加载整个数据集?

python pandas

19
推荐指数
2
解决办法
8164
查看次数

numpy fromfile(count = -1)在Mac OS上返回零的数组,用于大文件大小

我正在使用numpy.fromfile读取文件:

mat1=numpy.fromfile("path/to/file", numpy.uint8, 40000, "")
Run Code Online (Sandbox Code Playgroud)

这按照我的预期读取文件.

但是当我读完整个文件时:

mat1=numpy.fromfile("path/to/file", numpy.uint8, -1, "")
Run Code Online (Sandbox Code Playgroud)

这给了我一个零的数组. [0,0,0,...,0,0,0]

我累了: numpy.count_nonzeros(mat1)哪个给0

size(mat1)以字节为单位给出文件的确切大小.所以它产生了一个预期大小的数组,但它充满了零.

python arrays numpy python-2.7

13
推荐指数
1
解决办法
1061
查看次数

如何将大量数据附加到Pandas HDFStore并获得自然的唯一索引?

我正在将大量的http日志(80GB +)导入到Pandas HDFStore中进行统计处理.即使在单个导入文件中,我也需要在加载内容时批量处理内容.到目前为止,我的策略是将解析后的行读入DataFrame,然后将DataFrame存储到HDFStore中.我的目标是让索引键对DataStore中的单个键唯一,但每个DataFrame再次重新启动它自己的索引值.我期待HDFStore.append()会有一些机制告诉它忽略DataFrame索引值,只是继续添加到我的HDFStore键的现有索引值,但似乎无法找到它.如何在HDFStore增加其现有索引值的同时导入DataFrame并忽略其中包含的索引值?以下示例代码每10行批处理.当然,真实的东西会更大.

if hd_file_name:
        """
        HDF5 output file specified.
        """

        hdf_output = pd.HDFStore(hd_file_name, complib='blosc')
        print hdf_output

        columns = ['source', 'ip', 'unknown', 'user', 'timestamp', 'http_verb', 'path', 'protocol', 'http_result', 
                   'response_size', 'referrer', 'user_agent', 'response_time']

        source_name = str(log_file.name.rsplit('/')[-1])   # HDF5 Tables don't play nice with unicode so explicit str(). :(

        batch = []

        for count, line in enumerate(log_file,1):
            data = parse_line(line, rejected_output = reject_output)

            # Add our source file name to the beginning.
            data.insert(0, source_name )    
            batch.append(data)

            if not (count % 10):
                df …
Run Code Online (Sandbox Code Playgroud)

python indexing dataframe pandas hdfstore

13
推荐指数
1
解决办法
1万
查看次数

从Oracle读取包含数百万行的大表并写入HDF5

我正在使用具有数百万行和100多列的Oracle数据库.我试图使用带有索引的某些列的pytables将这些数据存储在HDF5文件中.我将在pandas DataFrame中读取这些数据的子集并执行计算.

我尝试过以下方法:

下载表,使用实用程序到csv文件,使用pandas通过chunk读取csv文件块并使用附加到HDF5表pandas.HDFStore.我创建了一个dtype定义并提供了最大的字符串大小.

但是,现在当我尝试直接从Oracle DB下载数据并将其发布到HDF5文件时pandas.HDFStore,我遇到了一些问题.

pandas.io.sql.read_frame不支持分块读取.我没有足够的RAM能够先将整个数据下载到内存中.

如果我尝试使用cursor.fecthmany()固定数量的记录,那么DB表中的读取操作需要很长时间才能被索引,我必须读取属于日期范围的记录.但是我使用的DataFrame(cursor.fetchmany(), columns = ['a','b','c'], dtype=my_dtype) 是,创建的DataFrame总是推断dtype而不是强制执行我提供的dtype(与read_csv不同,它遵循我提供的dtype).因此,当我将此DataFrame附加到已存在的时HDFDatastore,存在类型不匹配,例如,float64可能在一个块中被解释为int64.

如果你们能提出你的想法并指出我正确的方向,那就表示赞赏.

python hdf5 pytables pandas

11
推荐指数
1
解决办法
4077
查看次数

HDF5的快速读/写性能推荐压缩是什么(在Python/pandas中)?

我已多次阅读过在HDF5中打开压缩可以带来更好的读/写性能.

我想知道什么样的理想设置可以在以下方面实现良好的读/写性能:

 data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)
Run Code Online (Sandbox Code Playgroud)

我已经在使用fixed格式(即h5py),因为它比它更快table.我有强大的处理器,并不关心磁盘空间.

我经常存储DataFramefloat64str类型的约文件.2500行×9000列.

compression hpc hdf5 h5py pandas

11
推荐指数
1
解决办法
4110
查看次数

python pandas自定义agg功能

Dataframe:
  one two
a  1  x
b  1  y
c  2  y
d  2  z
e  3  z

grp = DataFrame.groupby('one')
grp.agg(lambda x: ???) #or equivalent function
Run Code Online (Sandbox Code Playgroud)

来自grp.agg的所需输出:

one two
1   x|y
2   y|z
3   z
Run Code Online (Sandbox Code Playgroud)

在集成数据帧之前我的agg函数是"|".join(sorted(set(x))).理想情况下,我希望组中有任意数量的列,并且agg返回"|".join(sorted(set())每个列项,如上面的两个.我也试过了np.char.join().

爱熊猫,它带我从一个800线复杂的程序到一个400线的步行放大公园.谢谢 :)

python numpy pandas

10
推荐指数
1
解决办法
8064
查看次数

删除非常大的数据集上的重复项

我正在研究一个包含大约1600万行和85列的13.9 GB csv文件.我知道可能有几十万行是重复的.我运行此代码来删除它们

import pandas

concatDf=pandas.read_csv("C:\\OUT\\Concat EPC3.csv")
nodupl=concatDf.drop_duplicates()
nodupl.to_csv("C:\\OUT\\Concat EPC3- NoDupl.csv",index=0)
low_memory=False  
Run Code Online (Sandbox Code Playgroud)

然而,这让我陷入了MemoryError.我的公羊是16克,不能再高了.是否有一种更有效的方法来删除重复项,如果没有我不得不将csv文件分解为更小的文件?

python duplicates large-data

10
推荐指数
2
解决办法
1302
查看次数

当内存不足时,Jupyter Lab会冻结计算机-如何防止它发生?

我最近开始使用Jupyter Lab,但我的问题是我要处理非常大的数据集(通常,数据集本身大约是计算机RAM的1/4)。经过几次转换后,另存为新的Python对象,我倾向于耗尽内存。问题是,当我接近可用的RAM限制并执行需要另一个RAM空间的任何操作时,计算机将冻结,而修复它的唯一方法是重新启动它。这是Jupyter Lab / Notebook中的默认行为,还是我应该设置的某些设置?通常,我希望程序崩溃(例如在RStudio中),而不是整个计算机

python jupyter-notebook jupyter-lab

10
推荐指数
3
解决办法
262
查看次数

在Pandas中使用多处理读取csv文件的最简单方法

这是我的问题.
随着一堆.csv文件(或其他文件).熊猫是一种简单的阅读方式并保存为Dataframe格式.但是当文件量很大时,我想用多处理来读取文件以节省一些时间.

我早期的尝试

我手动将文件分成不同的路径.分别使用:

os.chdir("./task_1)
files = os.listdir('.')
files.sort()
for file in files:
    filename,extname = os.path.splitext(file)
    if extname == '.csv':
        f = pd.read_csv(file)
        df = (f.VALUE.as_matrix()).reshape(75,90)   
Run Code Online (Sandbox Code Playgroud)

然后结合它们.

如何运行它们pool来实现我的问题?
任何建议将不胜感激!

python csv multiprocessing pandas

8
推荐指数
2
解决办法
1万
查看次数

熊猫read_csv加快

我正在读取一个大型csv,其中包含约1000万行和20个不同的列(带有标头名称)。

我有值,2列与日期和一些字符串。

目前,我需要大约1.5分钟的时间来加载数据,如下所示:

df = pd.read_csv('data.csv', index_col='date', parse_dates = 'date')
Run Code Online (Sandbox Code Playgroud)

我想问一下,如何在读取数据后立即将其数据框设置得更快呢?

我尝试使用HDF5数据库,但是速度很慢。

我尝试读取的数据子集(我选择了8列,并从实际的20列和几百万行中给出了3行):

Date    Comp     Rating Price   Estprice    Dividend?   Date_earnings   Returns
3/12/2017   Apple   Buy   100   114              Yes    4/4/2017    0.005646835
3/12/2017   Blackberry  Sell    120 97            No    4/25/2017   0.000775331
3/12/2017   Microsoft   Hold    140 100          Yes    5/28/2017   0.003028423
Run Code Online (Sandbox Code Playgroud)

谢谢你的建议。

python database pandas

8
推荐指数
1
解决办法
8306
查看次数