小编Dav*_*lis的帖子

Pandas列列表中每行的第一个非空值

如果我在pandas中有一个DataFrame,它看起来像:

    A   B   C
0   1 NaN   2
1 NaN   3 NaN
2 NaN   4   5
3 NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)

如何从每一行获取第一个非空值?例如,对于上述情况,我想得到:( [1, 3, 4, None]或等效系列).

python pandas

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

使用RPM分发python包以及模块依赖项

我有几个python应用程序包含应该打包并部署为RPM的脚本/模块.

更棘手的是每个应用程序应该与所有python模块依赖项一起分发,并且这些应该优先于系统安装的任何应用程序使用.

其中一些RPM的目标主机具有有限的网络访问权限,因此RPM应包含运行应用程序所需的所有内容,而不是在部署时下载任何内容.

我已经看过包装和分发virtualenv,但重新定位virtualenv似乎并没有得到很好的支持.

我查看了zc.buildout,但发现文档缺乏.我可以看到如何在开发期间下载依赖项,而不是如何将它们作为更大的应用程序的一部分进行分发.不同的应用程序可能需要同一模块的不同版本,因此不应在系统范围内安装这些版本.

另一个痛点是应用程序中的任何python脚本都需要修改为在开发期间和部署后使用不同的sys.path,我无法看到明显的方法.

有关如何最好地实现这一点的建议吗?从开发人员的角度来看,工作流程的理想总结如下所示:

  1. 下载应用程序源
  2. 运行脚本以获取特定模块依赖项(如果不存在)(可能使用pip)
  3. 运行脚本来构建python应用程序,并将它和所有下载的依赖项打包到RPM中

然后,最终的RPM应该可以在没有网络访问权限的主机上安装和运行,并且只安装了python解释器.

python packaging rpm buildout virtualenv

12
推荐指数
1
解决办法
5430
查看次数

-d64交换机对Sun JVM驻留内存使用有何影响?

我有这个需要一些内存调整的webapp.虽然我已经在分析应用程序本身并削减了一些东西,但JVM本身在我们最繁忙的实例上看起来过于臃肿.(较低的卷实例没有此问题.)详细信息:

  • 平台:
    • RHEL4 64位(Linux 2.6.9-78.0.5.ELsmp #1 SMP x86_64)
    • Sun Java 6(Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode))
    • Tomcat 6 -d64startup.sh
  • 我的webapp目前有一些代码,在生产中需要运行64位的好处.
  • 我观察到经过一段时间(一周)后,JVM驻留内存大小(如上图所示)是我-Xmx设置大小的三倍.
  • 非堆内存大小等都是相对微不足道的,只是堆大小的一位数百分比
  • 只有一段代码需要64位的地址空间

如果我可以重构64位JVM的需要,并放弃-d64交换机,那会不会使JVM的常驻内存占用更小?换一种说法...

-d64交换机对Sun JVM驻留内存使用有何影响(如果有)?

java performance 64-bit jvm sun

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

为什么在闭包中调用函数与在Rust中直接调用函数时,生命周期会有所不同?

在以下代码示例中:

fn default_values() -> &'static [u32] {
    static VALUES: [u32; 3] = [1, 2, 3];
    &VALUES
}

fn main() {
    let values: [u32; 3] = [4, 5, 6];
    let optional_values: Option<&[u32]> = Some(&values);

    // this compiles and runs fine 
    let _v = optional_values.unwrap_or_else(|| default_values());

    // this fails to compile
    let _v = optional_values.unwrap_or_else(default_values);
}
Run Code Online (Sandbox Code Playgroud)

最后一个语句无法编译:

error[E0597]: `values` does not live long enough
  --> src/main.rs:8:49
   |
8  |     let optional_values: Option<&[u32]> = Some(&values);
   |                                                 ^^^^^^ borrowed value does not live long …
Run Code Online (Sandbox Code Playgroud)

rust

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

使用python的setuptools/setup.py编译和安装C可执行文件?

我有一个python模块,调用从C源构建的外部二进制文件.

该外部可执行文件的源代码是我的python模块的一部分,以.tar.gz文件的形式发布.

有没有解压缩的方法,然后编译外部可执行文件,并使用setuptools/setup.py安装它?

我想要达到的目标是:

  • 将二进制文件安装到虚拟环境中
  • 使用管理编译/安装二进制的setup.py install,setup.py build等等.
  • 制作我的python模块的二进制部分,以便它可以作为一个轮子分发而没有外部依赖

python setuptools setup.py python-3.x

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

如何在 Rust 中创建常量字符串文字?

我正在尝试定义一个在许多地方使用的常量格式字符串 format!宏一起使用。

我试过这样的事情:

const FORMAT_A: &'static str = "a: {}";
static FORMAT_B: &'static str = "b: {}";

fn main() {
    format!(FORMAT_A, "a");
    format!(FORMAT_B, "b");
}
Run Code Online (Sandbox Code Playgroud)

但是,这无法编译:

error: format argument must be a string literal.
 --> src/main.rs:5:13
  |
5 |     format!(FORMAT_A, "a");
  |             ^^^^^^^^

error: format argument must be a string literal.
 --> src/main.rs:6:13
  |
6 |     format!(FORMAT_B, "b");
  |             ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

还有另一种方法我应该定义一个常量字符串文字来使用format!吗?

rust

9
推荐指数
0
解决办法
5414
查看次数

有没有办法在测试期间从外部包装箱导入宏,没有任何警告?

我有类似的东西:

#[macro_use] extern crate log;

pub fn do_nothing() { let _ = log::Level::Info; }

#[cfg(test)]
mod tests {
    #[test]
    fn test_a() { debug!("Message."); }
}
Run Code Online (Sandbox Code Playgroud)

这会编译一个警告:

warning: unused `#[macro_use]` import
Run Code Online (Sandbox Code Playgroud)

如果我删除宏导入,并将第1行更改为:

extern crate log;
Run Code Online (Sandbox Code Playgroud)

然后我在编译时遇到以下错误:

error: cannot find macro `debug!` in this scope
Run Code Online (Sandbox Code Playgroud)

如果我然后尝试仅为测试模块导入宏,即:

extern crate log;

pub fn do_nothing() { let _ = log::Level::Info; }

#[cfg(test)]

mod tests {
    #[macro_use] extern crate log;
    #[test]
    fn test_a() { debug!("Message."); }
}
Run Code Online (Sandbox Code Playgroud)

然后我得到编译器错误:

error[E0468]: an `extern crate` loading macros must be …
Run Code Online (Sandbox Code Playgroud)

rust

6
推荐指数
1
解决办法
465
查看次数

运行 Kotlin 脚本时设置 JVM 最大堆大小?

我正在使用以下命令运行 Kotlin 脚本:

kotlinc -script myscript.kts
Run Code Online (Sandbox Code Playgroud)

这会进行一些非常繁重的数据处理,并且很快就会遇到 GC/堆空间错误(例如java.lang.OutOfMemoryError: GC overhead limit exceededjava.lang.OutOfMemoryError: Java heap space取决于脚本处理的内容)。

有没有办法在运行 Kotlin 脚本时增加 JVM 堆大小?尝试使用:

kotlinc -Xmx8g -script myscript.kts
Run Code Online (Sandbox Code Playgroud)

给出警告:

warning: flag is not supported by this version of the compiler: -Xmx8g
Run Code Online (Sandbox Code Playgroud)

kotlin

6
推荐指数
1
解决办法
1581
查看次数

为熊猫中的缺失数据组合添加值

我有一个熊猫数据框,其中包含以下内容:

person_id   status    year    count
0           'pass'    1980    4
0           'fail'    1982    1
1           'pass'    1981    2
Run Code Online (Sandbox Code Playgroud)

如果我知道每个字段的所有可能值是:

all_person_ids = [0, 1, 2]
all_statuses = ['pass', 'fail']
all_years = [1980, 1981, 1982]
Run Code Online (Sandbox Code Playgroud)

我想用count=0缺少的数据组合(person_id,status和year)填充原始数据框,即我希望新数据框包含:

person_id   status    year    count
0           'pass'    1980    4
0           'pass'    1981    0
0           'pass'    1982    0
0           'fail'    1980    0
0           'fail'    1981    0
0           'fail'    1982    2
1           'pass'    1980    0
1           'pass'    1981    2
1           'pass'    1982    0
1           'fail'    1980    0
1 …
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
3
解决办法
872
查看次数

与复制类型的借用特征相反?

我见过Borrow用于定义既接受拥有的类型也接受引用的函数的特征,例如Tor &Tborrow()然后在函数中调用该方法以获取&T.

是否有一些特性允许类型相反(即接受T&T获得的函数TCopy

例如对于这个例子:

use std::borrow::Borrow;

fn foo<T: Borrow<u32>>(value: T) -> u32 {
    *value.borrow()
}

fn main() {
    println!("{}", foo(&5));
    println!("{}", foo(5));
}
Run Code Online (Sandbox Code Playgroud)

这需要borrow()获取一个引用,然后立即取消引用。

是否有另一个实现只复制T传入的值,并取消引用如果&T给出?或者上面是写这种东西的惯用方式?

traits ownership rust borrowing

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