所以我了解到我可以使用DataFrame.groupby而无需使用MultiIndex进行子采样/横截面.
另一方面,当我在DataFrame上有MultiIndex时,我仍然需要使用DataFrame.groupby来进行子采样/横截面.
那么除了在打印时非常有用且漂亮的层次结构显示之外,什么是MultiIndex?
我想在水平轴上绘制一维阵列中的数据点[编辑:在给定的y值],如下图所示:
我怎么能用pylab做到这一点?
使用matplotlib,我可以在一个图上创建一个包含两个数据集的直方图(一个与另一个相邻,不是叠加).
import matplotlib.pyplot as plt
import random
x = [random.randrange(100) for i in range(100)]
y = [random.randrange(100) for i in range(100)]
plt.hist([x, y])
plt.show()
Run Code Online (Sandbox Code Playgroud)
这产生以下图.
但是,当我尝试用seabron做这件事时;
import seaborn as sns
sns.distplot([x, y])
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ValueError: color kwarg must have one color per dataset
Run Code Online (Sandbox Code Playgroud)
那么我尝试添加一些颜色值:
sns.distplot([x, y], color=['r', 'b'])
Run Code Online (Sandbox Code Playgroud)
我得到了同样的错误.我看到这篇关于如何叠加图形的文章,但我希望这些直方图是并排的,而不是叠加.
在查看文档时,它没有指定如何将列表列表作为第一个参数'a'.
如何使用seaborn实现这种直方图?
我在具有不同参数的循环中运行相同的模拟.每个模拟都使用一个data
只读取的pandas DataFrame(),从不修改.使用ipyparallel
(IPython parallel),我可以在模拟开始之前将此DataFrame放入我视图中每个引擎的全局变量空间:
view['data'] = data
Run Code Online (Sandbox Code Playgroud)
然后,引擎可以访问DataFrame以获取在其上运行的所有模拟.复制数据的过程(如果是腌制的,data
是40MB)只需几秒钟.但是,似乎如果模拟的数量增加,则内存使用量会变得非常大.我想这个共享数据是为每个任务而不是仅为每个引擎复制的.从具有引擎的客户端共享静态只读数据的最佳实践是什么?每个引擎复制一次是可以接受的,但理想情况下每个主机只需要复制一次(我在host1上有4个引擎,在host2上有8个引擎).
这是我的代码:
from ipyparallel import Client
import pandas as pd
rc = Client()
view = rc[:] # use all engines
view.scatter('id', rc.ids, flatten=True) # So we can track which engine performed what task
def do_simulation(tweaks):
""" Run simulation with specified tweaks """
# Do sim stuff using the global data DataFrame
return results, id, tweaks
if __name__ == '__main__':
data = pd.read_sql("SELECT …
Run Code Online (Sandbox Code Playgroud) 我经常在解析数据文件时收到此警告:
WARNING:py.warnings:/usr/local/python3/miniconda/lib/python3.4/site-
packages/pandas-0.16.0_12_gdcc7431-py3.4-linux-x86_64.egg/pandas
/io/parsers.py:1164: DtypeWarning: Columns (0,2,14,20) have mixed types.
Specify dtype option on import or set low_memory=False.
data = self._reader.read(nrows)
Run Code Online (Sandbox Code Playgroud)
但是如果数据很大(我有50k行),我如何在数据中找到dtype的变化?
摘要:这不起作用:
df[df.key==1]['D'] = 1
Run Code Online (Sandbox Code Playgroud)
但这样做:
df.D[df.key==1] = 1
Run Code Online (Sandbox Code Playgroud)
为什么?
再生产:
In [1]: import pandas as pd
In [2]: from numpy.random import randn
In [4]: df = pd.DataFrame(randn(6,3),columns=list('ABC'))
In [5]: df
Out[5]:
A B C
0 1.438161 -0.210454 -1.983704
1 -0.283780 -0.371773 0.017580
2 0.552564 -0.610548 0.257276
3 1.931332 0.649179 -1.349062
4 1.656010 -1.373263 1.333079
5 0.944862 -0.657849 1.526811
In [6]: df['D']=0.0
In [7]: df['key']=3*[1]+3*[2]
In [8]: df
Out[8]:
A B C D key
0 1.438161 -0.210454 -1.983704 0 1
1 …
Run Code Online (Sandbox Code Playgroud) 我在 Mac 上安装了两个版本的 Python,分别是 3.5 和 3.7。有什么方法可以知道我在 3.5 中安装了哪些不在 3.7 中的软件包,例如您可以使用 pip(pulp、wordcloud 等)安装的软件包。
到目前为止我尝试过的是使用命令行:
diff -rq anaconda/.../python3.5/site-packages anaconda3/.../python3.7/site-packages
Run Code Online (Sandbox Code Playgroud)
这显示了目录之间的差异,但显示了大量重复包和核心模块的信息。如何找到两个 Anaconda 版本之间的软件包差异?
有几个类似的问题,但没有一个直接回答这个简单的问题:
如何捕获命令输出并将该内容流式传输到numpy数组而不创建要读取的临时字符串对象?
那么,我想做的是:
import subprocess
import numpy
import StringIO
def parse_header(fileobject):
# this function moves the filepointer and returns a dictionary
d = do_some_parsing(fileobject)
return d
sio = StringIO.StringIO(subprocess.check_output(cmd))
d = parse_header(sio)
# now the file pointer is at the start of data, parse_header takes care of that.
# ALL of the data is now available in the next line of sio
dt = numpy.dtype([(key, 'f8') for key in d.keys()])
# i don't know how do make this …
Run Code Online (Sandbox Code Playgroud) 有一段时间我现在在精神上受到两种物理系统建模设计理念的冲突的困扰,我想知道社区为此提出了什么样的解决方案.
对于复杂(呃)模拟,我喜欢为对象创建类的抽象,以及如何使用我想要研究的真实对象来识别类的对象实例,以及对象的某些属性如何表示现实生活对象的物理特征.让我们把弹道粒子系统作为一个简单的例子:
class Particle(object):
def __init__(self, x=0, y=0, z=0):
self.x = x
self.y = y
self.z = z
def __repr__(self):
return "x={}\ny={}\nz={}".format(self.x, self.y, self.z)
def apply_lateral_wind(self, dx, dy):
self.x += dx
self.y += dy
Run Code Online (Sandbox Code Playgroud)
如果我用一百万个值初始化它,我可能会这样做:
start_values = np.random.random((int(1e6),3))
particles = [Particle(*i) for i in start_values]
Run Code Online (Sandbox Code Playgroud)
现在,让我们假设我需要对我的所有粒子做一个特定的事情,比如添加一个横向风向量,只为这个特定的操作导致ax,y shift,因为我只有一堆(列表)我的所有粒子,我需要遍历所有粒子才能做到这一点,这需要花费这么多时间:
%timeit _ = [p.apply_lateral_wind(0.5, 1.2) for p in particles]
1 loop, best of 3: 551 ms per loop
Run Code Online (Sandbox Code Playgroud)
现在,相反的明显范式,显然更有效,是保持在numpy
水平,只是直接在数组上进行数学运算,速度超过10倍:
%timeit start_values[...,:2] += np.array([0.5,1.2])
10 loops, best of 3: 20.3 ms per …
Run Code Online (Sandbox Code Playgroud)