小编joh*_*ase的帖子

如何将pandas数据帧中的每一行乘以不同的值

我试图将一个pandas数据帧的每一行乘以一个不同的值,并想知道最好的方法是什么.

例如,如果我有以下数据帧:

import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(2, 3))
df
     0          1           2
0   -1.283316   0.849488    1.936060
1   -2.078575   -0.871570   -0.970261
Run Code Online (Sandbox Code Playgroud)

我想将每行中的每个元素乘以列表或数组中的不同元素

vals = [1, 100]
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我希望第一行中的每个项目乘以1,第二行中的每个项目乘以100

结果应该是:

     0          1           2
0   -1.283316   0.849488    1.936060
1   -207.8575   -87.1570    -97.0261
Run Code Online (Sandbox Code Playgroud)

我试过了:

df * vals
df.multiply(vals)
df.multiply(vals, axis=1)
Run Code Online (Sandbox Code Playgroud)

根据我对该代码应该做什么的理解,这些都没有用,虽然我也没想到它们.我无法弄清楚用熊猫做一个简洁的方法,感谢任何帮助.

python pandas

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

在seaborn情节中使用sns.set

我已经找到了一个明确的答案并且找不到一个,如果之前有人问过,我道歉.我正在使用seaborn 0.6和matplotlib 1.4.3.我想在ipython笔记本中创建许多数字时暂时改变绘图的样式.

具体来说,在这个例子中,我想基于每个图更改字体大小和背景样式.

这创建了我正在寻找的图,但是全局定义了参数:

import seaborn as sns
import numpy as np

x = np.random.normal(size=100)

sns.set(style="whitegrid", font_scale=1.5)
sns.kdeplot(x, shade=True);
Run Code Online (Sandbox Code Playgroud)

然而这失败了:

with sns.set(style="whitegrid", font_scale=1.5):
    sns.kdeplot(x, shade=True);
Run Code Online (Sandbox Code Playgroud)

有:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-10-70c5b03f9aa8> in <module>()
----> 1 with sns.set(style="whitegrid", font_scale=1.5):
      2     sns.kdeplot(x, shade=True);

AttributeError: __exit__
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

with sns.axes_style(style="whitegrid", rc={'font.size':10}):
    sns.kdeplot(x, shade=True);
Run Code Online (Sandbox Code Playgroud)

哪个不会失败,但它也不会改变字体的大小.任何帮助将非常感激.

python seaborn

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

未捕获的类型错误:t.rgb 不是函数

未捕获的类型错误:t.rgb 不是函数

我创建了一个角度应用程序,构建了它,并试图为它提供服务

$ ng serve --prod --aot 
Run Code Online (Sandbox Code Playgroud)

这导致控制台中出现以下错误

Uncaught TypeError: t.rgb is not a function
    at HO (color.js.pre-build-optimizer.js:227)
    at GO (color.js.pre-build-optimizer.js:232)
    at rgb.js.pre-build-optimizer.js:36
    at RH (ramp.js.pre-build-optimizer.js:4)
    at Module.zUnb (BrBG.js.pre-build-optimizer.js:16)
    at f (bootstrap:78)
    at Object.0 (index.js.pre-build-optimizer.js:26)
    at f (bootstrap:78)
    at t (bootstrap:45)
    at Array.r [as push] (bootstrap:32)
Run Code Online (Sandbox Code Playgroud)

应用程序不显示

当我在不缩小(--prod标志)的情况下构建应用程序时,它可以工作。

我只在使用 D3 时看到这个问题

D3 ^5.9.1。角版本 7.3.9 。打字稿 3.2.4

我尝试了许多版本的组合,但都没有运气。

当我通过时它也成功运行--optimization=false ,到目前为止我无法调试它。这与此问题非常相似,但是解决方案不适用于这种情况

请让我知道是否有任何其他信息有用。

javascript d3.js angular

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

如何在Python中切片生成器对象或迭代器

我想循环一个迭代器的"切片".我不确定这是否可行,因为我知道切片迭代器是不可能的.我想做的是:

def f():
    for i in range(100):
        yield(i)
x = f()

for i in x[95:]:
    print(i)
Run Code Online (Sandbox Code Playgroud)

这当然失败了:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-37-15f166d16ed2> in <module>()
  4 x = f()
  5 
----> 6 for i in x[95:]:
  7     print(i)

TypeError: 'generator' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

是否有一种pythonic方式来循环生成器的"切片"?

基本上我实际关注的生成器读取一个非常大的文件并逐行执行一些操作.我想测试文件的切片以确保事情按预期执行,但让它在整个文件上运行是非常耗时的.

编辑:
如上所述,我需要在一个文件上.我希望有一种方法可以使用生成器显式指定这个例子:

import skbio

f = 'seqs.fna'
seqs = skbio.io.read(f, format='fasta')
Run Code Online (Sandbox Code Playgroud)

seqs是一个生成器对象

for seq in itertools.islice(seqs, 30516420, 30516432):
    #do a bunch of stuff here
    pass
Run Code Online (Sandbox Code Playgroud)

上面的代码做了我需要的,但是仍然非常慢,因为生成器仍然遍历所有行.我希望只遍历指定的切片

python for-loop generator slice

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

将pandas列值转换为行

我正在尝试将数据帧转换为长格式.

我开始的数据框:

df = pd.DataFrame([['a', 'b'],
                   ['d', 'e'], 
                   ['f', 'g', 'h'],
                   ['q', 'r', 'e', 't']])
df = df.rename(columns={0: "Key"})

    Key 1   2   3
0   a   b   None    None
1   d   e   None    None
2   f   g   h       None
3   q   r   e       t
Run Code Online (Sandbox Code Playgroud)

未指定列数,可能超过4.键后面的每个值应该有一个新行

这得到了我需要的东西,然而,似乎应该有一种方法来做到这一点,而不必删除空值:

new_df = pd.melt(df, id_vars=['Key'])[['Key', 'value']]
new_df = new_df.dropna()


    Key value
0   a   b
1   d   e
2   f   g
3   q   r
6   f   h
7   q   e
11  q   t?
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
2
解决办法
1005
查看次数

使用装饰器时出现ipyparallel错误

我试图使用ipyparallel系统运行一个工作,lru_cache并遇到问题.

从终端:

ipcluster start -n 2
Run Code Online (Sandbox Code Playgroud)

在ipython笔记本中:

from ipyparallel import Client
clients = Client()

def world():
    return hello() + " World"

def hello():
    return "Hello"

world()
'Hello World'
Run Code Online (Sandbox Code Playgroud)

使用ipyparallel运行它需要:

clients[:].push(dict(hello=hello))
Run Code Online (Sandbox Code Playgroud)

如果没有上一行,则以下操作失败,这不是意料之外的,但如果运行则可以正常工作:

clients[:].apply_sync(world)
['Hello World', 'Hello World']
Run Code Online (Sandbox Code Playgroud)

然而,这一切都按预期工作,lru_cache并行步骤会产生错误

from ipyparallel import Client
from functools import lru_cache

clients = Client()

def world():
    return hello() + " World"

@lru_cache(maxsize=2048)
def hello():
    return "Hello"

clients[:].push(dict(hello=hello))
clients[:].apply_sync(world)
Run Code Online (Sandbox Code Playgroud)

此操作失败,并显示以下错误:

  [0:apply]: 
---------------------------------------------------------------------------NameError                                 
Traceback (most recent call last)<string> in <module>()
<ipython-input-17-9ac5ef032485> in world()
NameError: …
Run Code Online (Sandbox Code Playgroud)

python ipython ipython-parallel jupyter-notebook

6
推荐指数
0
解决办法
335
查看次数

使用 pymongo 连接到 aws 时出现 ServerSelectionTimeoutError

我正在尝试使用密钥文件连接到托管在 AWS 实例上的 MongoDB。我能够通过 ssh 连接到实例并连接到数据库,没有任何问题。当我尝试使用 pymongo 从远程位置连接到数据库时,我收到此错误: ServerSelectionTimeoutError: SSL handshake failed: EOF occurred in violation of protocol

端口 27017 已打开,源设置为 0.0.0.0/0。

from pymongo import MongoClient

client = MongoClient('mongodb://ec2-123-45-678-910.compute-1.amazonaws.com', 
                     27017, 
                     ssl=True, 
                     ssl_keyfile='/path_to/mykey.pem')

db = client.test
coll = db.foo
coll.insert_many(records)

ServerSelectionTimeoutError: SSL handshake failed: EOF occurred in violation of protocol (_ssl.c:645)
Run Code Online (Sandbox Code Playgroud)

这个问题与我的几乎相同,但是错误不同,并且发布在那里的解决方案不适用于我的问题。

这里的地址和密钥已更改,我已经在这个问题上绕了几个小时没有运气,任何帮助将不胜感激。

python ssl mongodb amazon-web-services pymongo

6
推荐指数
2
解决办法
6924
查看次数

如何删除 0 的转换熊猫数据框以进行记录

我正在寻找一种有效的方法来从从 a 创建的字典列表中删除零pd.DataFrame以以下示例为例:

df = pd.DataFrame([[1, 2], [0, 4]], columns=['a', 'b'], index=['x', 'y'])
df.to_dict('records')

[{'a': 1, 'b': 2}, {'a': 0, 'b': 4}]
Run Code Online (Sandbox Code Playgroud)

我想要的是:

[{'a': 1, 'b': 2}, {'b': 4}]
Run Code Online (Sandbox Code Playgroud)

我有一个非常大的稀疏数据帧,存储所有零效率低下。因为数据帧很大,我正在寻找比循环字典的数据帧和删除零更快的解决方案,例如以下工作但非常慢并且使用大量内存。

new_records = []
for record in df.to_dict('records'):
    new_records.append(dict((k, v) for k, v in record.items() if v))
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法或方法?

python pandas

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

Python 相当于 db.getCollectionInfos

我正在尝试找到一种方法来列出 mongodb 集合的所有验证规则,我想用 python 来完成

在 mongo shell 中命令是这样的:

db.getCollectionInfos()
Run Code Online (Sandbox Code Playgroud)

但是我无法在 pymongo 中识别等效命令

db.foo.collection_infos()
db.foo.getCollectionInfos()
Run Code Online (Sandbox Code Playgroud)

两者都失败了(或类似的事情):

TypeError: 'Collection' object is not callable. If you meant to call the 'get_collection_infos' method on a 'Database' object it is failing because no such method exists.
Run Code Online (Sandbox Code Playgroud)

然后我尝试将基本上随机的命令放入解释器中

db.command({"foo": "getCollectionInfos"})
Run Code Online (Sandbox Code Playgroud)

不出所料,这也不起作用。

python validation mongodb pymongo

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

如何用熊猫绘制垂直区域图

是否有直接的方法使用熊猫绘制区域图,但是垂直定向图?

例如,水平绘制区域图我可以这样做:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot(kind='area');
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我可以垂直绘制条形图 'barh'

df.plot(kind='barh');
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但我无法想出一个简单的方法来获得一个垂直的区域图

python matplotlib pandas

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