小编chr*_*ite的帖子

在Pandas中创建许多新列的大多数Pythonic方法

我有一个大的数据帧df(~100列和~700万行),我需要创建~50个新的变量/列,它们是当前变量的简单转换.一种方法是使用许多.apply语句(我只是transform*用作简单转换的占位符,例如max或平方):

df['new_var1'] = df['old_var1'].apply(lambda x : transform1(x))
...
df['new_var50'] = df['old_var50'].apply(lambda x : transform50(x))
Run Code Online (Sandbox Code Playgroud)

另一种方法是首先创建一个字典

transform_dict = {
'new_var1' : lambda row : transform1(row),
...,
'new_var50' : lambda row : transform50(row)
}
Run Code Online (Sandbox Code Playgroud)

然后写一个.apply结合.concat:

df = pd.concat([df, 
   df.apply(lambda r: pd.Series({var : transform_dict[var](r) for var in transform_dict.keys()}), axis=1)], axis=1)
Run Code Online (Sandbox Code Playgroud)

一种方法优于另一种方法,无论是"Pythonic"如何,还是效率,可扩展性,灵活性?

python performance pandas

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

sbt腐败终端显示

这对我来说是一个令人头疼的问题; 我在Mac OS 10.11.6上,最近我开始使用sbtscala.我快到我每次运行一个命令SBT的情况下(如sbt run,sbt test等)的特定小Hello World类型的项目(包括在这篇文章的底部),我失去了看到我的键盘敲击之后的能力.我的标准提示仍然存在,但我输入的任何内容都没有出现.键盘仍然是注册的,因为我可以键入ls,按ENTER键仍然可以看到输出,但我看不到我键入的内容ls.

也许更令人困惑的是,如果我跑步sbt并进入交互模式,我可以看到我的按键!同样,我可以在scala REPL和IPython会话中看到我的击键.但是,我无法在标准python解释器中看到我的击键!

它似乎不是我的问题$PS1,因为我可以unset PS1,问题是相同的.其他项目似乎也没有.

目录结构是标准sbt结构,它位于src/main/scala/Hello.scala:

object Hello extends App {                                                         
    val p = Person("Foo")                                              
    println("Hello from " + p.name)                                                
}                                                                                  

case class Person(var name: String) 
Run Code Online (Sandbox Code Playgroud)

是否有可能当我将其复制/粘贴到vim(从.pdf中,如果相关的话)时,一些奇怪的角色隐藏在那里?否则,这是怎么回事?

macos terminal scala sbt

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

当从镶木地板读取时,dask dataframe列重命名很慢(呃)

我发现dask.dataframe.rename无论何时从镶木地板文件中读取数据帧,都会显着增加计算时间:

In [1]: import dask.dataframe as dd
   ...: df = dd.demo.daily_stock('GOOG', '2008', '2010', freq='1s', random_state=1234)
   ...: 

In [2]: %time df.close.mean().compute()
CPU times: user 7.73 s, sys: 1.15 s, total: 8.88 s
Wall time: 3.5 s
Out[2]: 452.30345234893554

In [3]: %time df = df.rename(columns={col: col.upper() for col in df.columns}); df.CLOSE.mean().compute()
CPU times: user 8.06 s, sys: 1.21 s, total: 9.27 s
Wall time: 3.81 s

In [4]: df.to_parquet('df', compression='GZIP')
   ...: df = dd.read_parquet('df')
   ...: 

In [5]: %time df.CLOSE.mean().compute()
CPU …
Run Code Online (Sandbox Code Playgroud)

python performance dask

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

JTextField数组将无法编译

我正在尝试创建一个大型的JTextField对象数组,由于某种原因,我的代码将无法编译.我现在已经玩了很久了,我找不到编译器生气的好理由; 这是我的代码只有一个长度为2的数组:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class SUDOKU_temp extends JApplet
{
    //declare fields

    public JTextField[] fields = new JTextField[2];
    fields[0] = new JTextField();
    fields[1] = new JTextField();

    //other stuff happens down here that the compiler is ok with
}
Run Code Online (Sandbox Code Playgroud)

如果我只运行长度为1的数组的代码,我会得到完全相同的错误,它们是:

linux63:~demo$ ./compile
SUDOKU_temp.java:11: ']' expected
    fields[0] = new JTextField();
           ^
SUDOKU_temp.java:11: ';' expected
    fields[0] = new JTextField();
            ^
SUDOKU_temp.java:11: illegal start of type
    fields[0] = new JTextField();
              ^
SUDOKU_temp.java:11: <identifier> expected
    fields[0] = new JTextField(); …
Run Code Online (Sandbox Code Playgroud)

java swing compiler-errors jtextfield

0
推荐指数
2
解决办法
118
查看次数

标签 统计

performance ×2

python ×2

compiler-errors ×1

dask ×1

java ×1

jtextfield ×1

macos ×1

pandas ×1

sbt ×1

scala ×1

swing ×1

terminal ×1