首页 > 解决方案 > 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 构造函数没有正确调用!

任何的想法?谢谢!

标签: pythonpandas

解决方案


你可以做这样的事情

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。

但是根据您的数据集,将所有数据读入内存需要一些时间


推荐阅读