小编Pea*_*ful的帖子

在pandas dataframe中显示具有一个或多个NaN值的行

我有一个数据框,其中一些行包含缺少的值.

In [31]: df.head()
Out[31]: 
                             alpha1  alpha2    gamma1    gamma2       chi2min  
filename                                                                        
M66_MI_NSRh35d32kpoints.dat  0.8016  0.9283  1.000000  0.074804  3.985599e+01   
F71_sMI_DMRI51d.dat          0.0000  0.0000       NaN  0.000000  1.000000e+25   
F62_sMI_St22d7.dat           1.7210  3.8330  0.237480  0.150000  1.091832e+01   
F41_Car_HOC498d.dat          1.1670  2.8090  0.364190  0.300000  7.966335e+00   
F78_MI_547d.dat              1.8970  5.4590  0.095319  0.100000  2.593468e+01 
Run Code Online (Sandbox Code Playgroud)

我想在屏幕上的那些行上显示.如果我尝试df.isnull(),它会给出一个带有True和的长数据帧False.有什么方法可以选择这些行并在屏幕上打印它们吗?

python nan dataframe pandas

40
推荐指数
4
解决办法
5万
查看次数

TypeError:使用 pytest 夹具时缺少 1 个必需的位置参数

我已经在文件中编写了测试类,并且尝试使用pytest 固定装置,这样我就不必在每个测试函数中创建相同的输入数据。下面是最小的工作示例。

import unittest
import pytest

@pytest.fixture
def base_value():
    return 5

class Test(unittest.TestCase):

    def test_add_two(self, base_value):
        result = base_value + 2
        self.assertEqual(result, 7, "Result doesn't match")
Run Code Online (Sandbox Code Playgroud)

但是,当我使用 pytest-3 对此进行测试时,出现以下错误:

类型错误:test_add_two() 缺少 1 个必需的位置参数:'base_value'

这让我感到困惑,因为 base_value 明确作为 的参数之一给出test_add_two。非常感谢任何帮助。

python fixtures pytest python-3.x

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

sklearn没有属性'datasets'

我已经开始使用sckikit-learn来完成我的工作.所以我正在阅读教程,该教程给出了加载一些数据集的标准过程:

$ python
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> digits = datasets.load_digits()
Run Code Online (Sandbox Code Playgroud)

但是,为方便起见,我尝试按以下方式加载数据:

In [1]: import sklearn

In [2]: iris = sklearn.datasets.load_iris()
Run Code Online (Sandbox Code Playgroud)

但是,这会引发以下错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-db77d2036db5> in <module>()
----> 1 iris = sklearn.datasets.load_iris()

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

但是,如果我使用明显相似的方法:

In [3]: from sklearn import datasets

In [4]: iris = datasets.load_iris()
Run Code Online (Sandbox Code Playgroud)

它没有问题.实际上以下也有效:

In [5]: iris = sklearn.datasets.load_iris()
Run Code Online (Sandbox Code Playgroud)

我对此完全感到困惑.我错过了一些非常微不足道的事情吗?这两种方法有什么区别?

python machine-learning python-3.x scikit-learn

19
推荐指数
1
解决办法
8495
查看次数

在pandas read_csv中自定义分隔符

我正在将许多不同的数据文件读入各种pandas数据帧.这些数据文件中的列由空格分隔.但是,对于每个文件,空格的数量是不同的(对于其中一些,只有一个空间,对于其他空间,有两个空格,依此类推).因此,每次导入文件时,我都必须手动转到该文件并查看已使用的空格数,并在以下位置提供大量空格sep:

import pandas as pd
df = pd.read_csv('myfile.dat', sep = '    ')
Run Code Online (Sandbox Code Playgroud)

有什么方法可以告诉大熊猫假设"任意数量的空格"作为分隔符?另外,有什么方法可以告诉pandas使用tab(\t)或空格作为分隔符?

python separator pandas

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

删除gnuplot多色时的空白间隙

我在gnuplot中使用multiplot在单个图中插入四个图.我的代码看起来像这样:

set term postscript eps enhanced color
set xlabel 'i'
set ylabel 'j'
set xtics 20
set ytics 20
set xlabel font ",20"
set ylabel font ",20"
set pm3d map
set pm3d corners2color c1
set out "Rulkovpattern.eps"
set multiplot layout 2,2
set title "(a)"
set size square 0.55,0.55
spl 'patternD0pt02.dat' notitle
set title "(b)"
set size square 0.55,0.55
spl 'patternD0pt04.dat' notitle
set size square 0.55,0.55
set title "(c)"
spl 'patternD0pt06.dat' notitle
set size square 0.55,0.55
set title "(d)"
spl 'patternD0pt08.dat' …
Run Code Online (Sandbox Code Playgroud)

gnuplot

13
推荐指数
1
解决办法
9719
查看次数

用matplotlib中的箭头绘制相空间轨迹

我正在尝试绘制某个动力系统的相空间图.实际上,我有一个2d平面,其中有一个起点,然后是下一个点,依此类推.我想用线连接这些点,并且我想绘制一些箭头,以便我能够看到方向(起点到下一点等).我决定使用linetype '->'来实现这一点,但它没有给出任何好的结果,箭头实际上似乎多次指向错误的方向.它们间隔很小,因此我看不到各条线.

我的代码如下:

import numpy as np
import matplotlib.pylab as plt
from scipy.integrate import odeint

def system(vect, t):
    x, y = vect
    return [x - y - x * (x**2 + 5 * y**2), x + y - y * (x**2 + y**2)]

vect0 = [(-2 + 4*np.random.random(), -2 + 4*np.random.random()) for i in range(5)]
t = np.linspace(0, 100, 1000)

for v in vect0:
    sol = odeint(system, v, t)
    plt.plot(sol[:, 0], sol[:, 1], '->')

plt.show()
Run Code Online (Sandbox Code Playgroud)

结果图如下所示: 阶段图

可以看出,箭头没有与连接点的线正确对齐.此外,许多箭头"走出去",我希望它们"进入",因为下一个点始终位于中间的闭环.此外,情节看起来太乱,我想绘制更少的箭头,以便情节看起来更好.有没有人知道如何做到这一点?提前致谢.

python plot matplotlib

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

与Networkx相比,Graph-tool的速度惊人地慢

在看了令人印象深刻的性能比较后,我决定尝试使用图形工具.因此,为了进行比较,我编写了代码以使用两个包生成随机树.

图形工具代码:

import numpy as np
import graph_tool.all as gt

# construct an initial graph with two nodes and one link
n = 5000
G = gt.Graph(directed = False)
G.add_edge(0, 1)

for t in range(2, n):
    # connect the new vertex to one of the old vertices randomly
    G.add_edge(np.random.choice(range(t)), t)
Run Code Online (Sandbox Code Playgroud)

Networkx代码:

import networkx as nx
import numpy as np

n = 5000
# initial graph
G = nx.Graph()
G.add_edge(0, 1)

for t in range(2, n):
    G.add_edge(t, np.random.choice(range(t)))
Run Code Online (Sandbox Code Playgroud)

图形工具在我的4核机器上大约需要14秒,而networkx在同一台机器上需要不到2秒!我错过了一些明显的东西吗 …

python networkx graph-tool

10
推荐指数
1
解决办法
4623
查看次数

在seaborn jointplot中自定义轴标签

我似乎陷入了一个相对简单的问题但是在搜索了最后一小时并经过大量实验之后无法修复它.

我有两个numpy数组x,y我正在使用seaborn的联合图来绘制它们:

sns.jointplot(x, y)
Run Code Online (Sandbox Code Playgroud)

现在我想分别将x轴和y轴标记为"X轴标签"和"Y轴标签".如果我使用plt.xlabel,标签将进入边际分布.如何让它们出现在关节轴上?

numpy matplotlib seaborn

10
推荐指数
1
解决办法
9636
查看次数

在numpy中转换一组数字,以便将每个数字转换为一些小于它的其他数字

考虑一组数字:

In [8]: import numpy as np

In [9]: x = np.array([np.random.random() for i in range(10)])

In [10]: x
Out[10]: 
array([ 0.62594394,  0.03255799,  0.7768568 ,  0.03050498,  0.01951657,
        0.04767246,  0.68038553,  0.60036203,  0.3617409 ,  0.80294355])
Run Code Online (Sandbox Code Playgroud)

现在,我想这组变换成另一组y以下列方式:每个元素ix,相应的元素jy将其他元素的数量在x这不到i.例如,上面给出的内容x如下:

In [25]: y
Out[25]: array([ 6.,  2.,  8.,  1.,  0.,  3.,  7.,  5.,  4.,  9.])
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用简单的python循环来做到这一点:

In [16]: for i in range(len(x)):
    ...:     tot = 0
    ...:     for j in …
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x

8
推荐指数
2
解决办法
210
查看次数

ValueError:长度不匹配:在pandas dataframe中创建分层列时,预期的轴有0个元素

我正在阅读关于Pandas中的层次索引的文档.我尝试从中测试示例以创建带有分层索引的空数据框:

In [5]: df = pd.DataFrame()

In [6]: df.columns = pd.MultiIndex(levels = [['first', 'second'], ['a', 'b']], labels = [[0, 0, 1, 1], [0, 1, 0, 1]])
Run Code Online (Sandbox Code Playgroud)

但是,它会抛出一个错误:

ValueError                                Traceback (most recent call last)
<ipython-input-6-dd823f9b8d22> in <module>()
----> 1 df.columns = pd.MultiIndex(levels = [['first', 'second'], ['a', 'b']], labels = [[0, 0, 1, 1], [0, 1, 0, 1]])

/usr/local/lib/python3.4/dist-packages/pandas/core/generic.py in __setattr__(self, name, value)
   2755         try:
   2756             object.__getattribute__(self, name)
-> 2757             return object.__setattr__(self, name, value)
   2758         except AttributeError:
   2759             pass

pandas/src/properties.pyx …
Run Code Online (Sandbox Code Playgroud)

python multi-index dataframe python-3.x pandas

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