我正在处理大型数据集(数百万条记录,有时是数百万条记录),并希望使用与R链接良好的数据库程序.我正在尝试在mysql和sqlite之间做出决定.数据是静态的,但我需要做很多查询.
在这个指向sqlite帮助的链接中,它指出:
"默认页面大小为1024字节,SQLite数据库的大小限制为2 TB(241字节).即使它可以处理更大的数据库,SQLite也会将整个数据库存储在一个磁盘文件中,并且许多文件系统限制了最大值如果你正在考虑这么大的数据库,你最好考虑使用一个客户端/服务器数据库引擎,它将内容分布在多个磁盘文件中,也可能跨多个卷."
我不确定这意味着什么.当我尝试使用mysql和sqlite时,似乎mysql速度更快,但我还没有构建非常严格的速度测试.我想知道,由于数据集的大小,mysql对我来说是否比sqlite更好.上面的描述似乎表明可能是这种情况,但我的数据不在2TB附近.
有一个关于stackoverflow的讨论触及了这个并引用了相同的sqlite信息页面,但它并没有完全解决这个问题.
我非常感谢从文件系统中理解这个最大文件大小限制的任何见解,以及它如何影响索引表和运行查询的速度.这可以帮助我决定使用哪个数据库进行分析.
从如何从两个制表符分隔的文件中获取枢轴线?,有一种使用 unix 命令从两个文件中透视行的快速方法。
如果我们有两对文件:
f1a 和 f1bf2a 和 f2b目标是提供一个 3 列制表符分隔的文件,其中包括:
f1a / f2a文件中同时出现在f1a和中的行在哪里f1b:
我尝试了以下可行的方法,但如果文件非常大,则将需要大量内存来存储f1和f2字典。例如具有数十亿行的文件。
import sys
from tqdm import tqdm
f1a, f1b, f2a, f2b = sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4]
# Read first pair of file into memory.
with open(f1a) as fin_f1a, open(f1a) as fin_f1b:
f1 = {s.strip().replace('\t', ' ') :t.strip().replace('\t', ' ') for s, t in tqdm(zip(fin_f1a, fin_f1b))}
with open(s2) as …Run Code Online (Sandbox Code Playgroud) 假设我有4个小型DataFrame
df1,df2,df3和df4
import pandas as pd
from functools import reduce
import numpy as np
df1 = pd.DataFrame([['a', 1, 10], ['a', 2, 20], ['b', 1, 4], ['c', 1, 2], ['e', 2, 10]])
df2 = pd.DataFrame([['a', 1, 15], ['a', 2, 20], ['c', 1, 2]])
df3 = pd.DataFrame([['d', 1, 10], ['e', 2, 20], ['f', 1, 1]])
df4 = pd.DataFrame([['d', 1, 10], ['e', 2, 20], ['f', 1, 15]])
df1.columns = ['name', 'id', 'price']
df2.columns = ['name', 'id', 'price'] …Run Code Online (Sandbox Code Playgroud) 如何从一组元组中过滤数据帧,以便配对相同?我需要一种更优雅的写作方式。我尽量不使用合并,因为它会降低效率。
所以我有一个名为 tup_list 的元组列表:
[('118', '35'), ('35', '35'), ('118', '202')
假设每个元组中的第一个元素是 A,第二个是 B,我试图根据这个 tup_list 过滤我的数据帧,其中配对需要相同。
原始数据框:
A B
118 35
118 40
35 202
118 1
35 35
Run Code Online (Sandbox Code Playgroud)
根据tup_list过滤后,新的dataframe应该是:
A B
118 35
35 35
Run Code Online (Sandbox Code Playgroud)
只应返回精确的配对。
目前我正在使用 df= df.merge(tup_list, on=['A','B'], how='inner'). But is not very efficient as my actual data is larger.
请建议更有效的写作方式。