python - Pandas:如何处理真正的大数据?
问题描述
我的数据样本非常大(120 万份文档),我只需要在一个“熊猫数据框”上创建和分析数据。现在我的代码如下所示:
conn = psycopg2.connect("dbname=monty user=postgres host=localhost password=postgres")
cur = conn.cursor('aggre')
cur.execute("SELECT * FROM binance.zrxeth_ob_indicators;")
row = cur.fetchall()
df = pd.DataFrame(row,columns = ['timestamp', 'topAsk', 'topBid', 'CPA', 'midprice', 'CPB', 'spread', 'CPA%', 'CPB%'])
但是本地上传变量df中的所有内容需要很长时间?到目前为止,我尝试的是这样做:
for row in cur:
dfsub = pd.DataFrame(row,columns=['timestamp', 'topAsk', 'topBid', 'CPA', 'midprice', 'CPB', 'spread', 'CPA%', 'CPB%'])
df = df.concat([df,dfsub])
但它给了我以下错误: DataFrame 构造函数没有正确调用!
任何的想法?谢谢!
解决方案
你可以做这样的事情
class Postgres:
def __init__(self, host, database, user=None, password='', schema='public'):
self.user = user or getpass.getuser()
self.database = database
self.host = host
self.engine = self.create_engine(self.host, self.database, self.user, password)
self.schema = schema
@staticmethod
def create_engine(host, database, user, password):
return psycopg2.connect("postgresql://{user}:{password}@{host}/{database}".format(
host=host,
database=database,
user=user,
password=password
))
def execute(self, query: object) -> object:
"""
:param query:
:return: pd.Dataframe()
"""
result_df = pd.read_sql(query, self.engine)
self.engine.commit()
return result_df
这样,您就可以使用从 pandas 的 postgres 结果创建优化的 DataFrame。
但是根据您的数据集,将所有数据读入内存需要一些时间
推荐阅读
- javascript - 仅在 Javascript forEach/map 之后执行代码
- javascript - 从 html 文本中获取数字,但它们显示为正方形
- postgresql - 在 postgres 上使用两阶段提交
- r - 将不是日期格式的整数列转换为缩写月份
- python - 如何在 Kaggle Kernels(或在 Colab 中使用 TF2)设置 Tensorboard?(为了调整超参数)
- amazon-web-services - AWS 路由中 Active-Active 的主要好处是什么
- c# - 将 LINQ 查询转换为 WPF 标签内容
- flutter - 如何在颤动中制作可调整的图像容器
- python - Python:计算具有重复值的列中每个唯一值的第一个实例
- javascript - 如何尝试在 javascript 中执行操作