我有一个数据框,其中一些行包含缺少的值.
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.有什么方法可以选择这些行并在屏幕上打印它们吗?
我已经在文件中编写了测试类,并且尝试使用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。非常感谢任何帮助。
我已经开始使用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)
我对此完全感到困惑.我错过了一些非常微不足道的事情吗?这两种方法有什么区别?
我正在将许多不同的数据文件读入各种pandas数据帧.这些数据文件中的列由空格分隔.但是,对于每个文件,空格的数量是不同的(对于其中一些,只有一个空间,对于其他空间,有两个空格,依此类推).因此,每次导入文件时,我都必须手动转到该文件并查看已使用的空格数,并在以下位置提供大量空格sep:
import pandas as pd
df = pd.read_csv('myfile.dat', sep = ' ')
Run Code Online (Sandbox Code Playgroud)
有什么方法可以告诉大熊猫假设"任意数量的空格"作为分隔符?另外,有什么方法可以告诉pandas使用tab(\t)或空格作为分隔符?
我在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) 我正在尝试绘制某个动力系统的相空间图.实际上,我有一个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)
可以看出,箭头没有与连接点的线正确对齐.此外,许多箭头"走出去",我希望它们"进入",因为下一个点始终位于中间的闭环.此外,情节看起来太乱,我想绘制更少的箭头,以便情节看起来更好.有没有人知道如何做到这一点?提前致谢.
在看了令人印象深刻的性能比较后,我决定尝试使用图形工具.因此,为了进行比较,我编写了代码以使用两个包生成随机树.
图形工具代码:
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秒!我错过了一些明显的东西吗 …
我似乎陷入了一个相对简单的问题但是在搜索了最后一小时并经过大量实验之后无法修复它.
我有两个numpy数组x,y我正在使用seaborn的联合图来绘制它们:
sns.jointplot(x, y)
Run Code Online (Sandbox Code Playgroud)
现在我想分别将x轴和y轴标记为"X轴标签"和"Y轴标签".如果我使用plt.xlabel,标签将进入边际分布.如何让它们出现在关节轴上?
考虑一组数字:
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以下列方式:每个元素i中x,相应的元素j在y将其他元素的数量在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) 我正在阅读关于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 ×8
python-3.x ×4
pandas ×3
dataframe ×2
matplotlib ×2
numpy ×2
fixtures ×1
gnuplot ×1
graph-tool ×1
multi-index ×1
nan ×1
networkx ×1
plot ×1
pytest ×1
scikit-learn ×1
seaborn ×1
separator ×1