小编Ale*_*ley的帖子

查找列表的最大/最小值时管理空列表/无效输入(Python)

我在Python中使用max(list)和找到列表的最大值和最小值min(list).但是,我想知道如何管理空列表.

例如,如果列表是一个空列表[],程序会引发'ValueError: min() arg is an empty sequence'但我想知道如何使程序只是打印'empty list or invalid input'而不是崩溃.如何管理这些错误?

python error-handling list max min

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

运行最大numpy数组值

我需要一种快速的方法来保持一个numpy数组的运行最大值.例如,如果我的数组是:

x = numpy.array([11,12,13,20,19,18,17,18,23,21])
Run Code Online (Sandbox Code Playgroud)

我想要:

numpy.array([11,12,13,20,20,20,20,20,23,23])
Run Code Online (Sandbox Code Playgroud)

显然我可以通过一个小循环来做到这一点:

def running_max(x):
    result = [x[0]]
    for val in x:
        if val > result[-1]:
            result.append(val)
        else:
            result.append(result[-1])
    return result
Run Code Online (Sandbox Code Playgroud)

但我的阵列有数十万个条目,我需要多次调用它.似乎必须有一个笨拙的技巧来删除循环,但我似乎找不到任何可行的东西.另一种方法是将其写为C扩展,但似乎我要重新发明轮子.

python numpy

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

如何修复vim中的JSON缩进?

在vim中,JSON的默认缩进是:

{
    "employees": [
    { "firstName":"John" , "lastName":"Doe" }, 
    { "firstName":"Anna" , "lastName":"Smith" }, 
    { "firstName":"Peter" , "lastName":"Jones" }
    ]
}
Run Code Online (Sandbox Code Playgroud)

但我的期望是:

{
    "employees": [
        { "firstName":"John" , "lastName":"Doe" }, 
        { "firstName":"Anna" , "lastName":"Smith" }, 
        { "firstName":"Peter" , "lastName":"Jones" }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我做了google并尝试了一些vim-json插件,但没有一个能解决这个问题.

javascript vim json

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

将"TimeStamp"列截断为pandas`DataFrame`中的小时精度

我有一个pandas.DataFrame称为df其具有自动生成的索引,与列dt:

df['dt'].dtype, df['dt'][0]
# (dtype('<M8[ns]'), Timestamp('2014-10-01 10:02:45'))
Run Code Online (Sandbox Code Playgroud)

我想要做的是创建一个截断为小时精度的新列.我目前正在使用:

df['dt2'] = df['dt'].apply(lambda L: datetime(L.year, L.month, L.day, L.hour))
Run Code Online (Sandbox Code Playgroud)

这很有效,所以没关系.但是,我有一个很好的方式使用pandas.tseries.offsets或创建一个DatetimeIndex或类似的.

所以,如果可能的话,是否有一些pandas魔法可以做到这一点?

python datetime dataframe pandas

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

应该何时使用内存视图?

memoryview的完整描述可以在这里找到:

创建一个memoryview引用obj.obj必须支持缓冲协议.支持缓冲协议的内置对象包括bytesbytearray.

A memoryview具有元素的概念,元素是由始发对象obj处理的原子存储单元.对于许多简单类型,例如bytesbytearray,元素是单个字节,但是其他类型array.array可能具有更大的元素.

python python-3.x memoryview

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

按列索引在Numpy数组的每一行中选择一个元素

有没有更好的方法从"input_array"和"select_id"获取"output_array"?

我们可以摆脱range( input_array.shape[0] )

>>> input_array = numpy.array( [ [3,14], [12, 5], [75, 50] ] )
>>> select_id = [0, 1, 1]
>>> print input_array
[[ 3 14]
 [12  5]
 [75 50]]

>>> output_array = input_array[  range( input_array.shape[0] ), select_id ]
>>> print output_array
[ 3  5 50]
Run Code Online (Sandbox Code Playgroud)

select numpy

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

numpy:argmin()和argmax()函数的逻辑是什么?

我无法理解的输出argmax,并argmin在与轴参数使用.例如:

>>> a = np.array([[1,2,4,7], [9,88,6,45], [9,76,3,4]])
>>> a
array([[ 1,  2,  4,  7],
       [ 9, 88,  6, 45],
       [ 9, 76,  3,  4]])
>>> a.shape
(3, 4)
>>> a.size
12
>>> np.argmax(a)
5
>>> np.argmax(a,axis=0)
array([1, 1, 1, 1])
>>> np.argmax(a,axis=1)
array([3, 1, 1])
>>> np.argmin(a)
0
>>> np.argmin(a,axis=0)
array([0, 0, 2, 2])
>>> np.argmin(a,axis=1)
array([0, 2, 2])
Run Code Online (Sandbox Code Playgroud)

如您所见,最大值是点(1,1),最小值是点(0,0).所以在我运行的逻辑中:

  • np.argmin(a,axis=0) 我期望 array([0,0,0,0])
  • np.argmin(a,axis=1) 我期望 array([0,0,0])
  • np.argmax(a,axis=0) 我期望 array([1,1,1,1])
  • np.argmax(a,axis=1) 我期望 array([1,1,1])

我对事物的理解有什么问题?

python arrays numpy argmax

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

找到最接近给定数字的k个数字

说我有一个清单[1,2,3,4,5,6,7].我想找到3个最接近的数字,比方说6.5.然后返回的值将是[5,6,7].

找到一个最接近的数字在python中并不是那么棘手,可以使用

min(myList, key=lambda x:abs(x-myNumber))
Run Code Online (Sandbox Code Playgroud)

但我试图不围绕这个来找到k个最接近的数字.是否有一种pythonic方式来实现上述任务?

python closest

27
推荐指数
2
解决办法
7781
查看次数

在运算符中,float("NaN")和np.nan

我以前认为inPython 中的运算符使用相等性检查来检查某些集合中元素的存在==,因此element in some_list大致相当于any(x == element for x in some_list).例如:

True in [1, 2, 3]
# True because True == 1
Run Code Online (Sandbox Code Playgroud)

要么

1 in [1., 2., 3.]
# also True because 1 == 1.
Run Code Online (Sandbox Code Playgroud)

然而,众所周知,它NaN本身并不等同.所以我期待的float("NaN") in [float("NaN")]False.而且它False确实是.

但是,如果我们使用numpy.nan而不是float("NaN"),情况则完全不同:

import numpy as np
np.nan in [np.nan, 1, 2]
# True
Run Code Online (Sandbox Code Playgroud)

np.nan == np.nan仍然给False!

这怎么可能?np.nan和之间有什么区别float("NaN") …

python containers numpy nan

27
推荐指数
2
解决办法
3485
查看次数

Pandas groupby与bin计数

我有一个看起来像这样的DataFrame:

+----------+---------+-------+
| username | post_id | views |
+----------+---------+-------+
| john     |       1 |     3 |
| john     |       2 |    23 |
| john     |       3 |    44 |
| john     |       4 |    82 |
| jane     |       7 |     5 |
| jane     |       8 |    25 |
| jane     |       9 |    46 |
| jane     |      10 |    56 |
+----------+---------+-------+
Run Code Online (Sandbox Code Playgroud)

我想将它转换为计算属于某些二进制文件的视图:

+------+------+-------+-------+--------+
|      | 1-10 | 11-25 | 25-50 | 51-100 |
+------+------+-------+-------+--------+ …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas pandas-groupby

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