小编Cha*_*imG的帖子

检查pandas Series是否至少有一个项大于一个值

以下代码将打印为True,因为Series包含至少一个大于1的元素.但是,它看起来有点像Pythonic.如果一个系列包含一个特定值的数字,是否有更多Pythonic方式返回True?

import pandas as pd

s = pd.Series([0.5, 2])
print True in (s > 1)
Run Code Online (Sandbox Code Playgroud)

真正

编辑:上述答案不仅不是Pythonic,它有时会因某种原因返回错误的结果.例如:

s = pd.Series([0.5])
print True in (s < 1)
Run Code Online (Sandbox Code Playgroud)

python pandas

11
推荐指数
1
解决办法
2万
查看次数

SQLAlchemy:如何在聚合后进行过滤

如何过滤掉所有总份额为 0 的组?

q = session.query(Trades.ticker, func.sum(Trades.shares))
g = q.group_by(Trades.ticker)
f = g.filter(func.sum(Trades.shares) != 0)
result = f.all()
Run Code Online (Sandbox Code Playgroud)

这会在第 3 行引发错误:

... sqlalchemy.exc.OperationalError:(sqlite3.OperationalError) 滥用聚合:sum() ...

解决方法是删除过滤器并使用列表理解:

result = [x for x in g.all() if x[1] != 0.0]
Run Code Online (Sandbox Code Playgroud)

但与过滤 SQL 查询相比,这非常慢,因为它将所有数据加载到内存中,而不是只加载过滤后的数据。

(编辑以简化。)

python sqlalchemy

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

如何在函数中修改pandas DataFrame,以便调用者看到更改?

我发现自己正在对各种[pandas][1]DataFrame 执行重复性任务,所以我做了一个函数来进行处理.如何修改df函数process_df(df)以便调用者看到所有更改(不指定返回值)?

代码的简化版本:

def process_df(df):
    df.columns = map(str.lower, df.columns)

df = pd.DataFrame({'A': [1], 'B': [2]})
process_df(df)
print df
Run Code Online (Sandbox Code Playgroud)
   A  B 
0  1  2
Run Code Online (Sandbox Code Playgroud)

编辑新代码:

def process_df(df):
    df = df.loc[:, 'A']

df = pd.DataFrame({'A': [1], 'B': [2]})
process_df(df)
print df
Run Code Online (Sandbox Code Playgroud)
   A  B 
0  1  2
Run Code Online (Sandbox Code Playgroud)

python pandas

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

从对象列表创建动态级嵌套dict?

我试图将对象列表转换为嵌套的dict,可以通过索引访问.

以下代码适用于两级嵌套字典.我想将它扩展到灵活地工作任意数量的级别.

from collections import namedtuple
import pprint 

Holding = namedtuple('holding', ['portfolio', 'ticker', 'shares'])
lst = [
        Holding('Large Cap', 'TSLA', 100),
        Holding('Large Cap', 'MSFT', 200),
        Holding('Small Cap', 'UTSI', 500)
]

def indexer(lst, indexes):
    """Creates a dynamic nested dictionary based on indexes."""
    result = {}
    for item in lst:
        index0 = getattr(item, indexes[0])
        index1 = getattr(item, indexes[1])
        result.setdefault(index0, {}).setdefault(index1, [])
        result[index0][index1].append(item)
    return result 


d = indexer(lst, ['portfolio', 'ticker'])
pp = pprint.PrettyPrinter()
pp.pprint(d)
Run Code Online (Sandbox Code Playgroud)

输出:

{'Large Cap': {'MSFT': [holding(portfolio='Large Cap', ticker='MSFT', shares=200)],
               'TSLA': …
Run Code Online (Sandbox Code Playgroud)

python

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

键入提示列表的子类

我使用一个子类内置列表的类.

class Qry(list):
    """Stores a list indexable by attributes."""

    def filter(self, **kwargs):
        """Returns the items in Qry that has matching attributes.

        Example:
            obj.filter(portfolio='123', account='ABC').
        """

        values = tuple(kwargs.values())

        def is_match(item):
            if tuple(getattr(item, y) for y in kwargs.keys()) == values:
                return True
            else:
                return False

        result = Qry([x for x in self if is_match(x)], keys=self._keys)

        return result
Run Code Online (Sandbox Code Playgroud)

现在我要输入提示:

class C:
    a = 1

def foo(qry: Qry[C]):
    """Do stuff here."""
Run Code Online (Sandbox Code Playgroud)

如何在python 3.5+中键入提示自定义容器类?

python python-3.x

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

如何在.Net 2.0中的List中查找字符串的索引

我试图获取List中字符串的索引号.我尝试了以下代码:

List<string> Markets = new List<string>() {"HKG", "TYO", "NSE", "STU", "FRA", "LON", "SIN", "MIL", "TSE", "ASX", "STO", "AEX", "MEX", "NSE", "EPA", "SWX", "CVE", "BRU", "SWX"};
int index = Markets.FindIndex("HKG");
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

'System.Collections.Generic.List.FindIndex(System.Predicate <string>)'的最佳重载方法匹配有一些无效参数参数1:无法从'string'转换为'System.Predicate <string>'

知道如何让编译器喜欢这段代码吗?

PS我使用的是QuantShare的C#,应该是.Net 2.0

c#

3
推荐指数
2
解决办法
5132
查看次数

Python:strptime()不起作用

我正在尝试将字符串转换为日期.如果我正确阅读文档,则以下代码应该有效:

import datetime
d = datetime.strptime('January 01, 2015', '%B %d, %Y')
Run Code Online (Sandbox Code Playgroud)

相反,我得到错误:

AttributeError: 'module' object has no attribute 'strptime'
Run Code Online (Sandbox Code Playgroud)

python python-2.7

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

Python namedtuple的可变默认参数

我碰到有namedtuples使用默认参数从一个整洁的方式在这里.

from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Node.__new__.__defaults__ = (None, None, None)
Node()
Run Code Online (Sandbox Code Playgroud)

节点(val =无,左=无,右=无)

如果您希望'right'的默认值为空列表,您会怎么做?您可能知道,使用可变默认参数(例如列表)是否定的.

有没有一种简单的方法来实现它?

python namedtuple

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

标签 统计

python ×7

pandas ×2

c# ×1

namedtuple ×1

python-2.7 ×1

python-3.x ×1

sqlalchemy ×1