小编Aka*_*all的帖子

什么`ValueError:不能从重复的轴重新索引'是什么意思?

ValueError: cannot reindex from a duplicate axis当我试图将索引设置为某个值时,我得到了一个.我尝试用一​​个简单的例子重现这个,但我做不到.

这是我在ipdb跟踪中的会话.我有一个带字符串索引的DataFrame,以及整数列,浮点值.但是,当我尝试为sum所有列的总和创建索引时,我收到ValueError: cannot reindex from a duplicate axis错误.我创建了一个具有相同特征的小型DataFrame,但无法重现该问题,我可能缺少什么?

我真的不明白是什么ValueError: cannot reindex from a duplicate axis意思,这个错误信息是什么意思?也许这可以帮助我诊断问题,这是我问题中最容易回答的部分.

ipdb> type(affinity_matrix)
<class 'pandas.core.frame.DataFrame'>
ipdb> affinity_matrix.shape
(333, 10)
ipdb> affinity_matrix.columns
Int64Index([9315684, 9315597, 9316591, 9320520, 9321163, 9320615, 9321187, 9319487, 9319467, 9320484], dtype='int64')
ipdb> affinity_matrix.index
Index([u'001', u'002', u'003', u'004', u'005', u'008', u'009', u'010', u'011', u'014', u'015', u'016', u'018', u'020', u'021', u'022', u'024', u'025', u'026', u'027', u'028', u'029', u'030', u'032', u'033', u'034', u'035', …
Run Code Online (Sandbox Code Playgroud)

python pandas

205
推荐指数
8
解决办法
21万
查看次数

在numpy.array中查找唯一的行

我需要找到一个独特的行numpy.array.

例如:

>>> a # I have
array([[1, 1, 1, 0, 0, 0],
       [0, 1, 1, 1, 0, 0],
       [0, 1, 1, 1, 0, 0],
       [1, 1, 1, 0, 0, 0],
       [1, 1, 1, 1, 1, 0]])
>>> new_a # I want to get to
array([[1, 1, 1, 0, 0, 0],
       [0, 1, 1, 1, 0, 0],
       [1, 1, 1, 1, 1, 0]])
Run Code Online (Sandbox Code Playgroud)

我知道我可以在阵列上创建一个集合并循环,但我正在寻找一个有效的纯numpy解决方案.我相信有一种方法可以将数据类型设置为void然后我可以使用numpy.unique,但我无法弄清楚如何使其工作.

python arrays numpy unique

185
推荐指数
9
解决办法
8万
查看次数

如何使用键盘命令中断R中正在运行的代码?

任何人都可以告诉我如何中断R中正在运行的脚本?

假设我有一个无限循环或其他问题,我想阻止脚本运行.是否有键盘命令可以做到这一点?

如果它有帮助,在Python中它是Ctrl + c.我在R中尝试过,但它不起作用:).

我做了一些搜索这个看似简单的问题,但找不到答案.

提前致谢.

r

69
推荐指数
3
解决办法
22万
查看次数

Python Scipy中的双样本Kolmogorov-Smirnov检验

我无法弄清楚如何在Scipy中进行双样本KS测试.

阅读文档scipy kstest后

我可以看到如何测试分布与标准正态分布相同的位置

from scipy.stats import kstest
import numpy as np

x = np.random.normal(0,1,1000)
test_stat = kstest(x, 'norm')
#>>> test_stat
#(0.021080234718821145, 0.76584491300591395)
Run Code Online (Sandbox Code Playgroud)

这意味着在p值为0.76时,我们不能拒绝两个分布相同的零假设.

但是,我想比较两个分布,看看我是否可以拒绝零假设它们是相同的,如:

from scipy.stats import kstest
import numpy as np

x = np.random.normal(0,1,1000)
z = np.random.normal(1.1,0.9, 1000)
Run Code Online (Sandbox Code Playgroud)

并测试x和z是否相同

我试过天真:

test_stat = kstest(x, z)
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

TypeError: 'numpy.ndarray' object is not callable
Run Code Online (Sandbox Code Playgroud)

有没有办法在Python中进行双样本KS测试?如果是这样,我该怎么做?

先感谢您

python statistics numpy distribution scipy

60
推荐指数
2
解决办法
5万
查看次数

根据键转换numpy数组中的每个元素

我试图numpy.array根据给定的密钥翻译a的每个元素:

例如:

a = np.array([[1,2,3],
              [3,2,4]])

my_dict = {1:23, 2:34, 3:36, 4:45}
Run Code Online (Sandbox Code Playgroud)

我想得到:

array([[ 23.,  34.,  36.],
       [ 36.,  34.,  45.]])
Run Code Online (Sandbox Code Playgroud)

我可以看到如何使用循环:

def loop_translate(a, my_dict):
    new_a = np.empty(a.shape)
    for i,row in enumerate(a):
        new_a[i,:] = map(my_dict.get, row)
    return new_a
Run Code Online (Sandbox Code Playgroud)

是否有更高效和/或纯粹的numpy方式?

编辑:

我计时了,np.vectorizeDSM提出的方法对于更大的数组要快得多:

In [13]: def loop_translate(a, my_dict):
   ....:     new_a = np.empty(a.shape)
   ....:     for i,row in enumerate(a):
   ....:         new_a[i,:] = map(my_dict.get, row)
   ....:     return new_a
   ....: 

In [14]: def vec_translate(a, my_dict):    
   ....:     return np.vectorize(my_dict.__getitem__)(a)
   ....: 

In [15]: a …
Run Code Online (Sandbox Code Playgroud)

python numpy

51
推荐指数
4
解决办法
2万
查看次数

更新可变HashMap中的值

这是我想要做的:

use std::collections::HashMap;

fn main() {
    let mut my_map = HashMap::new();
    my_map.insert("a", 1);
    my_map.insert("b", 3);

    my_map["a"] += 10;
    // I expect my_map becomes {"b": 3, "a": 11}
}
Run Code Online (Sandbox Code Playgroud)

引发以下错误:

error[E0594]: cannot assign to immutable indexed content
 --> src/main.rs:8:5
  |
8 |     my_map["a"] += 10;
  |     ^^^^^^^^^^^^^^^^^ cannot borrow as mutable
  |
  = help: trait `IndexMut` is required to modify indexed content, but it is not implemented for `std::collections::HashMap<&str, i32>`
Run Code Online (Sandbox Code Playgroud)

我真的不明白这意味着什么,因为我做了HashMap可变的.当我尝试更新a中的元素时vector,我得到了预期的结果:

error[E0594]: cannot assign to data in …
Run Code Online (Sandbox Code Playgroud)

hashmap rust

44
推荐指数
4
解决办法
1万
查看次数

将Pandas数据帧转换为csv字符串

这是我想要得到的一个例子:

我有:

import pandas as pd 
df = pd.DataFrame({'A' : [0, 1], 'B' : [1, 6]})
Run Code Online (Sandbox Code Playgroud)

我的目标是:

',A,B\n0,0,1\n1,1,6\n'
Run Code Online (Sandbox Code Playgroud)

我可以用懒惰和可怕的方式实现这个目标:

df.to_csv('temp.csv') # create unnecessary file
body = open('temp.csv').read()
Run Code Online (Sandbox Code Playgroud)

此外to_string()方法看起来非常有前途的; 但是,我能想到的最好的是:

body = df.to_string()[1:].replace('  ', ',') + '\n'
Run Code Online (Sandbox Code Playgroud)

这不会创建一个不必要的文件,但似乎草率,也许不太可靠.

我错过了一个更简单的解决方案吗?

python pandas

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

将带有None值的python列表转换为带有nan值的numpy数组

我想转换包含数值和一个列表Nonenumpy.array,使得None与替代numpy.nan.

例如:

my_list = [3,5,6,None,6,None]

# My desired result: 
my_array = numpy.array([3,5,6,np.nan,6,np.nan]) 
Run Code Online (Sandbox Code Playgroud)

天真的方法失败了:

>>> my_list
[3, 5, 6, None, 6, None]
>>> np.array(my_list)
array([3, 5, 6, None, 6, None], dtype=object) # very limited 
>>> _ * 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'

>>> my_array # normal array can handle these operations
array([  3.,   5.,   6.,  nan,   6., …
Run Code Online (Sandbox Code Playgroud)

python numpy

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

比较Python中的两个生成器

我想知道==在比较两台发电机时的用途

例如:

x = ['1','2','3','4','5']

gen_1 = (int(ele) for ele in x)
gen_2 = (int(ele) for ele in x)
Run Code Online (Sandbox Code Playgroud)

gen_1gen_2对于所有实际用途都是相同的,但是当我比较它们时:

>>> gen_1 == gen_2
False
Run Code Online (Sandbox Code Playgroud)

我的猜测是,==这里的处理方式与is通常情况相同,因为gen_1gen_2位于内存的不同位置:

>>> gen_1
<generator object <genexpr> at 0x01E8BAA8>
>>> gen_2
<generator object <genexpr> at 0x01EEE4B8>
Run Code Online (Sandbox Code Playgroud)

他们的比较评估为False.我猜对了吗?欢迎任何其他见解.

顺便说一句,我知道如何比较两个发电机:

>>> all(a == b for a,b in zip(gen_1, gen_2))
True
Run Code Online (Sandbox Code Playgroud)

甚至

>>> list(gen_1) == list(gen_2)
True
Run Code Online (Sandbox Code Playgroud)

但如果有更好的方法,我很想知道.

python

24
推荐指数
4
解决办法
5697
查看次数

Python设置交集比Rust HashSet交集更快

这是我的Python代码:

len_sums = 0
for i in xrange(100000):
    set_1 = set(xrange(1000))
    set_2 = set(xrange(500, 1500))
    intersection_len = len(set_1.intersection(set_2))
    len_sums += intersection_len
print len_sums
Run Code Online (Sandbox Code Playgroud)

这是我的Rust代码:

use std::collections::HashSet;

fn main() {
    let mut len_sums = 0;
    for _ in 0..100000 {
        let set_1: HashSet<i32> = (0..1000).collect();
        let set_2: HashSet<i32> = (500..1500).collect();
        let intersection_len = set_1.intersection(&set_2).count();
        len_sums += intersection_len;
    }
    println!("{}", len_sums);
}
Run Code Online (Sandbox Code Playgroud)

我相信这些大致相当.我得到以下表现结果:

time python set_performance.py
50000000

real    0m11.757s
user    0m11.736s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud)

rustc set_performance.rs -O       
time ./set_performance 50000000

real    0m17.580s …
Run Code Online (Sandbox Code Playgroud)

python hashset rust

23
推荐指数
3
解决办法
3188
查看次数

标签 统计

python ×8

numpy ×4

pandas ×2

rust ×2

arrays ×1

distribution ×1

hashmap ×1

hashset ×1

r ×1

scipy ×1

statistics ×1

unique ×1