我想按给定列对数据进行排序,特别是p值.但是,问题是我无法将整个数据加载到内存中.因此,以下内容不起作用或者仅适用于小型数据集.
data = data.sort(columns=["P_VALUE"], ascending=True, axis=0)
Run Code Online (Sandbox Code Playgroud)
是否有一种快速方法可以按给定列对数据进行排序,该列只考虑块并且不需要在内存中加载整个数据集?
我正在使用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)以字节为单位给出文件的确切大小.所以它产生了一个预期大小的数组,但它充满了零.
我正在将大量的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) 我正在使用具有数百万行和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.
如果你们能提出你的想法并指出我正确的方向,那就表示赞赏.
我已多次阅读过在HDF5中打开压缩可以带来更好的读/写性能.
我想知道什么样的理想设置可以在以下方面实现良好的读/写性能:
data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)
Run Code Online (Sandbox Code Playgroud)
我已经在使用fixed格式(即h5py),因为它比它更快table.我有强大的处理器,并不关心磁盘空间.
我经常存储DataFrame第float64和str类型的约文件.2500行×9000列.
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线的步行放大公园.谢谢 :)
我正在研究一个包含大约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文件分解为更小的文件?
我最近开始使用Jupyter Lab,但我的问题是我要处理非常大的数据集(通常,数据集本身大约是计算机RAM的1/4)。经过几次转换后,另存为新的Python对象,我倾向于耗尽内存。问题是,当我接近可用的RAM限制并执行需要另一个RAM空间的任何操作时,计算机将冻结,而修复它的唯一方法是重新启动它。这是Jupyter Lab / Notebook中的默认行为,还是我应该设置的某些设置?通常,我希望程序崩溃(例如在RStudio中),而不是整个计算机
这是我的问题.
随着一堆.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来实现我的问题?
任何建议将不胜感激!
我正在读取一个大型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 ×9
pandas ×7
hdf5 ×2
numpy ×2
arrays ×1
compression ×1
csv ×1
database ×1
dataframe ×1
duplicates ×1
h5py ×1
hdfstore ×1
hpc ×1
indexing ×1
jupyter-lab ×1
large-data ×1
pytables ×1
python-2.7 ×1