我想知道是否有更简单,内存有效的方法从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])
......因为我最终在内存中留下了一个巨大的数组副本,这让我感到很恼火.也许有更好的方法呢?
我正在尝试从 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”的属性。
如何从这些多个表中挑选列?
使用配置单元或直线客户端,执行此语句没有问题:
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)