相关疑难解决方法(0)

使用熊猫的"大数据"工作流程

在学习大熊猫的过程中,我试图解决这个问题的答案已有好几个月了.我使用SAS进行日常工作,这非常适合它的核心支持.然而,由于其他许多原因,SAS作为一款软件非常糟糕.

有一天,我希望用python和pandas替换我对SAS的使用,但我目前缺乏大型数据集的核心工作流程.我不是在谈论需要分布式网络的"大数据",而是说文件太大而无法容纳在内存中,但又足够小以适应硬盘驱动器.

我的第一个想法是用于HDFStore在磁盘上保存大型数据集,并仅将我需要的部分拉入数据帧进行分析.其他人提到MongoDB是一种更容易使用的替代品.我的问题是:

有哪些最佳实践工作流程可用于完成以下任务:

  1. 将平面文件加载到永久的磁盘数据库结构中
  2. 查询该数据库以检索数据以提供给pandas数据结构
  3. 在操作pandas中的片段后更新数据库

真实世界的例子将非常受欢迎,尤其是那些在"大数据"上使用熊猫的人.

编辑 - 我希望如何工作的示例:

  1. 迭代导入大型平面文件并将其存储在永久的磁盘数据库结构中.这些文件通常太大而无法放入内存中.
  2. 为了使用Pandas,我想读取这些数据的子集(通常一次只有几列),它们可以适合内存.
  3. 我将通过对所选列执行各种操作来创建新列.
  4. 然后我必须将这些新列附加到数据库结构中.

我正在尝试找到执行这些步骤的最佳实践方法.阅读关于pandas和pytables的链接似乎附加一个新列可能是个问题.

编辑 - 特别回应杰夫的问题:

  1. 我正在构建消费者信用风险模型.数据种类包括电话,SSN和地址特征; 财产价值; 犯罪记录,破产等贬损信息......我每天使用的数据集平均有近1,000到2,000个字段的混合数据类型:数字和字符数据的连续,名义和序数变量.我很少附加行,但我会执行许多创建新列的操作.
  2. 典型操作涉及使用条件逻辑将多个列组合到新的复合列中.例如,if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'.这些操作的结果是我的数据集中每条记录的新列.
  3. 最后,我想将这些新列附加到磁盘上的数据结构中.我将重复第2步,使用交叉表和描述性统计数据探索数据,试图找到有趣,直观的模型关系.
  4. 典型的项目文件通常约为1GB.文件被组织成一种行,其中一行包括消费者数据的记录.每行对每条记录都有相同的列数.情况总是如此.
  5. 在创建新列时,我很少会按行进行子集化.但是,在创建报告或生成描述性统计信息时,对行进行子集化非常常见.例如,我可能想为特定的业务线创建一个简单的频率,比如零售信用卡.要做到这一点,除了我要报告的列之外,我只会选择那些业务线=零售的记录.但是,在创建新列时,我会提取所有数据行,只提取操作所需的列.
  6. 建模过程要求我分析每一列,寻找与某些结果变量的有趣关系,并创建描述这些关系的新化合物列.我探索的列通常以小集合完成.例如,我将专注于一组20个列,只处理属性值并观察它们与贷款违约的关系.一旦探索了这些并创建了新的列,我就转到另一组列,比如大学教育,然后重复这个过程.我正在做的是创建候选变量来解释我的数据和某些结果之间的关系.在这个过程的最后,我应用了一些学习技术,从这些复合列中创建一个方程式.

我很少会在数据集中添加行.我几乎总是会创建新的列(统计/机器学习用语中的变量或特征).

python hdf5 large-data mongodb pandas

913
推荐指数
14
解决办法
27万
查看次数

SQL Server中的行偏移量

SQL Server中是否有任何方法可以从给定的偏移量开始获取结果?例如,在另一种类型的SQL数据库中,可以执行以下操作:

SELECT * FROM MyTable OFFSET 50 LIMIT 25
Run Code Online (Sandbox Code Playgroud)

得到结果51-75.此构造似乎不存在于SQL Server中.

如何在不加载我不关心的所有行的情况下完成此操作?谢谢!

sql sql-server

127
推荐指数
7
解决办法
21万
查看次数

pandas中的大型持久性DataFrame

我正在探索作为长期SAS用户切换到python和pandas.

但是,今天运行一些测试时,我很惊讶python在尝试pandas.read_csv()128mb csv文件时内存不足.它有大约200,000行和200列主要是数字数据.

使用SAS,我可以将csv文件导入SAS数据集,它可以和我的硬盘一样大.

有类似的东西pandas吗?

我经常处理大型文件,无法访问分布式计算网络.

python sas pandas

88
推荐指数
4
解决办法
6万
查看次数

当 PythonOperator 出现错误“Negsignal.SIGKILL”时,Airflow DAG 失败

我在 Cloud Composer v1.16.16 上运行 Airflowv1.10.15。

我的 DAG 看起来像这样:

from datetime import datetime, timedelta

# imports
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from airflow.operators.dummy_operator import DummyOperator
from scripts import workday_extract, workday_config_large

default_args = {
    'owner': 'xxxx',
    'depends_on_past': False,
    'start_date': datetime(2021, 9, 14),
    'email_on_failure': True,
    'email': ['xxxx'],
    'retries': 1,
    'retry_delay': timedelta(minutes=2),
    'catchup': False
}


# Define the DAG with parameters
dag = DAG(
    dag_id='xxxx_v1',
    schedule_interval='0 20 * * *',
    default_args=default_args,
    catchup=False,
    max_active_runs=1,
    concurrency=1
)

def wd_to_bq(key, val, **kwargs):
    logger.info("workday …
Run Code Online (Sandbox Code Playgroud)

sigkill python-3.x google-cloud-platform airflow google-cloud-composer

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

熊猫在 read_sql_table 中使用太多内存

我正在尝试将 Postgres 数据库中的表读入 Python。表大约有 800 万行和 17 列,在数据库中的大小为 622MB。

我可以使用 psql 将整个表导出到 csv,然后使用 pd.read_csv() 读取它。它工作得很好。Python 进程只使用大约 1GB 的内存,一切都很好。

现在,我们需要做的任务要求这个拉取是自动化的,所以我想我可以直接从数据库中使用 pd.read_sql_table() 读取表。使用以下代码

import sqlalchemy
engine = sqlalchemy.create_engine("postgresql://username:password@hostname:5432/db")
the_frame = pd.read_sql_table(table_name='table_name', con=engine,schema='schemaname') 
Run Code Online (Sandbox Code Playgroud)

这种方法开始使用大量内存。当我使用任务管理器跟踪内存使用情况时,我可以看到 Python 进程的内存使用情况不断攀升,直到达到 16GB 并冻结计算机。

任何关于为什么会发生这种情况的想法表示赞赏。

python postgresql sqlalchemy pandas

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

熊猫 read_sql 没有读取所有行

我通过 Pandas 的 read_sql 和外部应用程序 (DbVisualizer) 运行完全相同的查询。

DbVisualizer 返回 206 行,而 pandas 返回 178 行。

我已经尝试根据How to create a large pandas dataframe from an sql query without running out of memory?,它没有改变。

这可能是什么原因以及解决方法?

查询:

select *
from rainy_days
where year=’2010’ and day=‘weekend’
Run Code Online (Sandbox Code Playgroud)

列包含:日期、年份、工作日、当天的降雨量、温度、地理位置(每个位置的行)、风测量值、前一天的降雨量等。

确切的python代码(减去连接细节)是:

import pandas
from sqlalchemy import create_engine

engine = create_engine(
   'postgresql://user:pass@server.com/weatherhist?port=5439',
)

query = """
        select *
        from rainy_days
        where year=’2010’ and day=‘weekend’
        """
df = pandas.read_sql(query, con=engine)
Run Code Online (Sandbox Code Playgroud)

sqlalchemy pandas

6
推荐指数
1
解决办法
2179
查看次数

在Python中将MySQL查询结果复制到临时文件

我对 SQL 世界有点陌生,但我正在学习名为Optimizing pandas.read_sql for Postgres 的教程。问题是,我正在处理一个大数据集,类似于教程中的示例,我需要一种更快的方法来执行查询并将其转换为 DataFrame。在那里,他们使用这个函数:

def read_sql_tmpfile(query, db_engine):
    with tempfile.TemporaryFile() as tmpfile:
        copy_sql = "COPY ({query}) TO STDOUT WITH CSV {head}".format(
           query=query, head="HEADER"
        )
        conn = db_engine.raw_connection()
        cur = conn.cursor()
        cur.copy_expert(copy_sql, tmpfile)  # I want to replicate this
        tmpfile.seek(0)
        df = pandas.read_csv(tmpfile)
        return df
Run Code Online (Sandbox Code Playgroud)

我尝试复制它,如下所示:

def read_sql_tmpfile(query, connection):
    with tempfile.TemporaryFile() as tmpfile:
        copy_sql = "COPY ({query}) TO STDOUT WITH CSV {head}".format(
           query=query, head="HEADER"
        )

        cur = connection.cursor()
        cur.copy_expert(copy_sql, tmpfile)
        tmpfile.seek(0)
        df = pandas.read_csv(tmpfile)
        return df
Run Code Online (Sandbox Code Playgroud)

问题是, …

python mysql postgresql temporary-files

5
推荐指数
1
解决办法
1484
查看次数

Python Pandas read_sql返回生成器对象

我正在使用pyodbc和pandas read_sql从Oracle数据库中提取数据。

输入此行时,我看不到任何错误

df = pd.read_sql(sql_str,cnxn,chunksize=10)
Run Code Online (Sandbox Code Playgroud)

但是当我试图看到

df
Run Code Online (Sandbox Code Playgroud)

我得到这个错误

<generator object _query_iterator at 0x092D40F8>
Run Code Online (Sandbox Code Playgroud)

我对这个错误的含义或可能导致的错误的搜索没有得到满意的答案。

使用chunksize的原因是,我有一个包含6000万行的Oracle数据库表,并计划按位下载然后将它们放在一起,就像这里一样: 如何从sql查询中创建大熊猫数据帧而不会耗尽内存?

python sql pandas

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