小编Joh*_*ior的帖子

如何将列和行的pandas DataFrame子集转换为numpy数组?

我想知道是否有更简单,内存有效的方法从pandas DataFrame中选择行和列的子集.

例如,给定此数据帧:

df = DataFrame(np.random.rand(4,5), columns = list('abcde'))
print df

          a         b         c         d         e
0  0.945686  0.000710  0.909158  0.892892  0.326670
1  0.919359  0.667057  0.462478  0.008204  0.473096
2  0.976163  0.621712  0.208423  0.980471  0.048334
3  0.459039  0.788318  0.309892  0.100539  0.753992

我只想要那些列'c'的值大于0.5的行,但我只需要列'b'和'e'来表示这些行.

这是我提出的方法 - 也许有更好的"熊猫"方式?

locs = [df.columns.get_loc(_) for _ in ['a', 'd']]
print df[df.c > 0.5][locs]

          a         d
0  0.945686  0.892892

我的最终目标是将结果转换为numpy数组以传递给sklearn回归算法,因此我将使用上面的代码,如下所示:

training_set = array(df[df.c > 0.5][locs])

......因为我最终在内存中留下了一个巨大的数组副本,这让我感到很恼火.也许有更好的方法呢?

python arrays numpy pandas scikit-learn

42
推荐指数
3
解决办法
11万
查看次数

在 SQLAlchemy 中加载连接列的子集

我正在尝试从 SQLAlchemy 中的多个连接表加载列的子集,但无法弄清楚魔术语法。

这是我正在尝试做的一个简单示例。它导致错误(如下):

from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, load_only

Base = declarative_base()

class Table1(Base):
    __tablename__ = 'table1'
    table1_id = Column(Integer, primary_key=True)
    table1_val = Column(String)
    r1 = relationship('Table2', backref = 'r2')


class Table2(Base):
    __tablename__ = 'table2'
    table2_id = Column(Integer, ForeignKey('table1.table1_id'), primary_key=True)
    table2_val = Column(String)


from sqlalchemy.orm import sessionmaker
some_engine = create_engine('postgresql://scott:tiger@localhost/')
Session = sessionmaker(bind=some_engine)
session = Session()
query = session.query(Table1).join(Table2).options(load_only('table1_val','table2_val'))
Run Code Online (Sandbox Code Playgroud)

ArgumentError: 在此查询的映射实体 Mapper|Table1|table1 上找不到名为“table2_val”的属性。

如何从这些多个表中挑选列?

python sqlalchemy

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

pyhs2/hive没有匹配路径文件和文件的文件存在

使用配置单元或直线客户端,执行此语句没有问题:

hive -e "LOAD DATA LOCAL INPATH '/tmp/tmpBKe_Mc' INTO TABLE unit_test_hs2"
Run Code Online (Sandbox Code Playgroud)

文件中的数据已成功加载到配置单元中.

但是,当从同一台机器使用pyhs2时,找不到该文件:

import pyhs2
conn_str = {'authMechanism':'NOSASL', 'host':'azus',}
conn = pyhs2.connect(conn_str)
with conn.cursor() as cur:
    cur.execute("LOAD DATA LOCAL INPATH '/tmp/tmpBKe_Mc' INTO TABLE unit_test_hs2")
Run Code Online (Sandbox Code Playgroud)

抛出异常:

Traceback (most recent call last):
  File "data_access/hs2.py", line 38, in write
    cur.execute("LOAD DATA LOCAL INPATH '%s' INTO TABLE %s" % (csv_file.name, table_name))
  File "/edge/1/anaconda/lib/python2.7/site-packages/pyhs2/cursor.py", line 63, in execute
    raise Pyhs2Exception(res.status.errorCode, res.status.errorMessage)
pyhs2.error.Pyhs2Exception: "Error while compiling statement: FAILED: SemanticException Line 1:23 Invalid path ''/tmp/tmpBKe_Mc'': No files …
Run Code Online (Sandbox Code Playgroud)

hive hdfs

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

标签 统计

python ×2

arrays ×1

hdfs ×1

hive ×1

numpy ×1

pandas ×1

scikit-learn ×1

sqlalchemy ×1