我和R一起工作了好几年.R在数据操作方面非常强大.我正在学习python,我想知道如何使用python操作数据.基本上我的数据集被组织为数据框(例如excel表).我想知道(通过示例)如何使用python完成这种基本数据操作任务?
1. Read csv file like the following
var1, var2, var3
1, 2, 3
4, 5, 6
7, 8, 9
2. Subset data where var2 in ('5', '8')
3. Make a new variable --> var4 = var3 * 3
4. Transpose this data
5. Write to csv file
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助和示例!
Dav*_*ark 22
我不同意Cpfohl的评论 - 也许是因为我自己经历过这个相同的转变,并且一个天真的用户如何能够更准确地表达问题并不明显.它实际上是一个积极的开发问题,目前有许多项目都提出了非重叠功能(例如在金融时间序列世界,大脑成像领域等).
简短的回答是python用于处理表和csv文件的各种库对于初学者而言不如R中的那些好,这是多年不同级别用户的最终结果.
首先,看看numpy中的重新排列.这可能是常用库中最接近的数据结构,类似于R中的data.frame.特别是,你可能会喜欢numpy.recfromcsv函数,尽管它不像read.csv那样健壮.在R中(例如,它会遇到非标准的行尾).
重新排列重新排列很容易(尽管创建一个看起来很笨重):
import numpy as np
mydata = np.array([(1.0, 2), (3.0, 4)], dtype=[('x', float), ('y', int)])
mydata = mydata.view(np.recarray)
mydata[mydata.x > 2]
Run Code Online (Sandbox Code Playgroud)
修改numpy数组的性质通常不像R中那么容易,但是有一个很好的函数库numpy.lib.recfunctions(必须单独导入 - 它不会带来简单的import numpy).特别是,请查看rec_append_fields和rec_join以添加列.
Numpy有一个函数numpy.savetxt可以接受一个简单的分隔符参数来制作一个csv文件,但它不会遗憾地打印列名(至少,我没有看到它的确如此).所以,虽然我不鼓励添加不必要的库(因为它提供了更少的可移植代码),你可能只是使用matplotlib.mlab.rec2csv(你也会在该邻域中找到一些其他类似的函数 - numpy社区试图移植一般有用的数字/数据操作代码要知道,也许你会这样做?).
你会注意到我没有回答(4),因为这没有意义.表不能在python或R中转置.数组或矩阵可以.因此,将数据转换为具有统一dtype的数组,然后使用myarray.T.
你可能会看到的其他工具是pytables(以及相关的包carray),larry,datarray,pandas和tabular.特别是,datarray正在寻求为标记数据阵列创建一个系统,该系统将作为其他项目的基础(我认为还有来自拉里和熊猫项目的开发人员).
希望有所帮助!DAV
nos*_*klo 14
import csv
from itertools import izip
with open('source.csv') as f:
reader = csv.reader(f)
# filter data
data = (row for row in reader if row[1].strip() in ('5', '8'))
# make a new variable
data = (row + [int(row[2]) * 3] for row in data)
# transpose data
data = izip(*data)
# write data to a new csv file
with open('destination.csv', 'w') as fw:
csv.writer(fw).writerows(data)
Run Code Online (Sandbox Code Playgroud)
Wes*_*ney 11
简单回答:使用熊猫
In [2]: df = read_csv('foo.csv', index_col=None)
In [3]: df
Out[3]:
var1 var2 var3
0 1 2 3
1 4 5 6
2 7 8 9
Run Code Online (Sandbox Code Playgroud)
In [4]: df[df['var2'].isin([5, 8])]
Out[4]:
var1 var2 var3
1 4 5 6
2 7 8 9
Run Code Online (Sandbox Code Playgroud)
In [5]: df['var4'] = df['var3'] * 2
In [6]: df
Out[6]:
var1 var2 var3 var4
0 1 2 3 6
1 4 5 6 12
2 7 8 9 18
Run Code Online (Sandbox Code Playgroud)
In [7]: df.T
Out[7]:
0 1 2
var1 1 4 7
var2 2 5 8
var3 3 6 9
var4 6 12 18
Run Code Online (Sandbox Code Playgroud)
In [8]: df.to_csv('foo2.csv')
In [9]: !cat foo2.csv
index,var1,var2,var3,var4
0,1,2,3,6
1,4,5,6,12
2,7,8,9,18
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10549 次 |
| 最近记录: |