将emacs组织模式表读入python数据框架的优雅方式
在使用python时,我经常喜欢使用emacs组织模式创建表。为了阅读表格,我做了如下的事情将emacs组织模式表读入python数据框架的优雅方式,python,pandas,dataframe,emacs,org-mode,Python,Pandas,Dataframe,Emacs,Org Mode,在使用python时,我经常喜欢使用emacs组织模式创建表。为了阅读表格,我做了如下的事情 import pandas as pd from numpy import * D = pd.read_csv('file.dat',sep='|') D = D.drop(D.columns[0], axis=1) D = D.drop(D.columns[-1], axis=1) D = D.rename(columns=lambda x: x.strip()) 是否有一种更优雅(特别是更短)的
import pandas as pd
from numpy import *
D = pd.read_csv('file.dat',sep='|')
D = D.drop(D.columns[0], axis=1)
D = D.drop(D.columns[-1], axis=1)
D = D.rename(columns=lambda x: x.strip())
是否有一种更优雅(特别是更短)的方式将组织模式表读入数据框架?也许还有一种优雅的方法可以将表和python源代码保存在同一个org文件中。尝试使用
D = pd.read_csv('file.dat', sep='\s*\|\s*').iloc[:, 1:-1]
下面是对修改后的问题的回答(将表和源代码保存在组织模式文件中)。我从以下地方偷走了熊猫的部分: 有关源块的更多信息,请参见 编辑:要保留列名(表的第一行),可以向源块标题添加
:colnames no
。列名本身
在源块内以tbl[0]
的形式获得,可以在DataFrame
构造函数中使用它来标记列,如下所示(注意:与上述相反,DataFrame
是完整的表格。我只是使用了两种不同的方法来选择要打印的部分,包括您在评论中提到的D.c
方法):
为什么
:colnames否
(而不是:colnames是
)需要添加列名是我从未理解的事情:有一天,我应该在组织模式邮件列表上发布一个关于它的问题…让表和源代码块在组织模式文件中处理不是更容易吗?不需要中间CSV文件。至少是简单的事情和实验,这很方便。@NickD:你能举一个详细的例子吗?@NickD:我稍微改变了这个问题,让答案朝这个方向……谢谢。这似乎没有保留列名。你知道吗?试着在源代码块标题中添加:colnames no
。你可能已经猜到了,我不是熊猫专家,所以我不确定在什么级别需要做什么。但是如果你打算这样做,我强烈建议你阅读文档(那里有很多东西)和实验。编辑答案以添加:colnames
标题。我的意思是我不能引用源代码块内的列名,例如D.D=D.a+D.b
。好吧,这可能会有帮助:在代码块内,tbl[0]
是第一行,即列名:['a',b',c']
。现在你所需要做的就是告诉熊猫关于它们的事情。
* foo
Here's a table:
#+NAME: foo
| a | b | c |
|----+-----+------|
| 1 | 1 | 1 |
| 2 | 4 | 8 |
| 3 | 9 | 27 |
| 4 | 16 | 64 |
| 5 | 25 | 125 |
| 6 | 36 | 216 |
| 7 | 49 | 343 |
| 8 | 64 | 512 |
| 9 | 81 | 729 |
| 10 | 100 | 1000 |
#+TBLFM: $2=pow($1, 2) :: $3 = pow($1, 3)
Here's a source block that initializes the variable `tbl' with the table `foo' above
and does to it some pandas things as suggested by Quang Hoang in his answer.
To evaluate the code block, press `C-C C-c' in the code block.
You will then get the result below:
#+begin_src python :var tbl=foo :results output
import pandas as pd
D = pd.DataFrame(tbl).iloc[:, 1:-1]
print(D)
#+end_src
#+RESULTS:
#+begin_example
1
0 1
1 4
2 9
3 16
4 25
5 36
6 49
7 64
8 81
9 100
#+end_example
#+begin_src python :var tbl=foo :results output :colnames no
import pandas as pd
D = pd.DataFrame(tbl, columns=tbl[0])
print(D.c)
print("===========")
print(D.iloc[1:, 0:-1])
#+end_src
#+RESULTS:
#+begin_example
0 c
1 1
2 8
3 27
4 64
5 125
6 216
7 343
8 512
9 729
10 1000
Name: c, dtype: object
===========
a b
1 1 1
2 2 4
3 3 9
4 4 16
5 5 25
6 6 36
7 7 49
8 8 64
9 9 81
10 10 100
#+end_example