在学习大熊猫的过程中,我试图解决这个问题的答案已有好几个月了.我使用SAS进行日常工作,这非常适合它的核心支持.然而,由于其他许多原因,SAS作为一款软件非常糟糕.
有一天,我希望用python和pandas替换我对SAS的使用,但我目前缺乏大型数据集的核心工作流程.我不是在谈论需要分布式网络的"大数据",而是说文件太大而无法容纳在内存中,但又足够小以适应硬盘驱动器.
我的第一个想法是用于HDFStore在磁盘上保存大型数据集,并仅将我需要的部分拉入数据帧进行分析.其他人提到MongoDB是一种更容易使用的替代品.我的问题是:
有哪些最佳实践工作流程可用于完成以下任务:
真实世界的例子将非常受欢迎,尤其是那些在"大数据"上使用熊猫的人.
编辑 - 我希望如何工作的示例:
我正在尝试找到执行这些步骤的最佳实践方法.阅读关于pandas和pytables的链接似乎附加一个新列可能是个问题.
编辑 - 特别回应杰夫的问题:
if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'.这些操作的结果是我的数据集中每条记录的新列.我很少会在数据集中添加行.我几乎总是会创建新的列(统计/机器学习用语中的变量或特征).
SQL Server中是否有任何方法可以从给定的偏移量开始获取结果?例如,在另一种类型的SQL数据库中,可以执行以下操作:
SELECT * FROM MyTable OFFSET 50 LIMIT 25
Run Code Online (Sandbox Code Playgroud)
得到结果51-75.此构造似乎不存在于SQL Server中.
如何在不加载我不关心的所有行的情况下完成此操作?谢谢!
我正在探索作为长期SAS用户切换到python和pandas.
但是,今天运行一些测试时,我很惊讶python在尝试pandas.read_csv()128mb csv文件时内存不足.它有大约200,000行和200列主要是数字数据.
使用SAS,我可以将csv文件导入SAS数据集,它可以和我的硬盘一样大.
有类似的东西pandas吗?
我经常处理大型文件,无法访问分布式计算网络.
我在 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
我正在尝试将 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 并冻结计算机。
任何关于为什么会发生这种情况的想法表示赞赏。
我通过 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) 我对 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)
问题是, …
我正在使用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查询中创建大熊猫数据帧而不会耗尽内存?
pandas ×5
python ×5
postgresql ×2
sql ×2
sqlalchemy ×2
airflow ×1
hdf5 ×1
large-data ×1
mongodb ×1
mysql ×1
python-3.x ×1
sas ×1
sigkill ×1
sql-server ×1