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) 我需要找到一个独特的行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
,但我无法弄清楚如何使其工作.
任何人都可以告诉我如何中断R中正在运行的脚本?
假设我有一个无限循环或其他问题,我想阻止脚本运行.是否有键盘命令可以做到这一点?
如果它有帮助,在Python中它是Ctrl + c.我在R中尝试过,但它不起作用:).
我做了一些搜索这个看似简单的问题,但找不到答案.
提前致谢.
我无法弄清楚如何在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测试?如果是这样,我该怎么做?
先感谢您
我试图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.vectorize
DSM提出的方法对于更大的数组要快得多:
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) 这是我想要做的:
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) 这是我想要得到的一个例子:
我有:
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)
这不会创建一个不必要的文件,但似乎草率,也许不太可靠.
我错过了一个更简单的解决方案吗?
我想转换包含数值和一个列表None
值numpy.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) 我想知道==
在比较两台发电机时的用途
例如:
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_1和gen_2对于所有实际用途都是相同的,但是当我比较它们时:
>>> gen_1 == gen_2
False
Run Code Online (Sandbox Code Playgroud)
我的猜测是,==
这里的处理方式与is
通常情况相同,因为gen_1和gen_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代码:
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)