我的问题涉及如何为pandas数据帧中的每一行进行计算,但是在每行的切片上进行计算,然后将得到的计算输出为新的数据帧,我可以将其保存为txt文件。
例如,假设我想输出一个数据帧,该数据帧具有第0,1和2列中数据的平均值(对于每一行)以及第3,4和5列的平均值。
我找到了如何对列进行切片,这是我到目前为止所提出的(仅在第0行运行它)。
for i in df:
if i == 0:
a = df.ix[:,0:3].mean()
b = df.ix[:,3::].mean()
print a, b
输出是这样的:
0 0.000002
1 0.000001
2 0.000001
3 0.000002
dtype: float64 3 0.000002
4 0.000001
5 0.000001
6 0.000002
7 0.000001
dtype: float64
我的问题是:
1)我不明白这个输出,因为我只期望两个数字:第一个切片的平均值(a)和第二个切片的平均值(b)..我哪里出错,或者这不是正确的方法来处理这项任务?
2)如何将结果存储在新数据帧中并将其另存为txt文件
答案 0 :(得分:4)
你不需要任何循环。有了熊猫,如果你要循环,你可能会做一些非常错误的事情。只需使用iloc
属性选择所有行和列子集,然后使用mean
调用axis=1
方法:
import pandas
import numpy
numpy.random.seed(0)
df = pandas.DataFrame(numpy.round(numpy.random.normal(size=(10, 5)),2))
means = pandas.DataFrame(df.iloc[:, :3].mean(axis=1), columns=['means'])
print(means)
means
0 1.046667
1 -0.060000
2 0.783333
3 0.536667
4 -0.346667
5 -0.530000
6 -0.120000
7 0.863333
8 -1.393333
9 -0.303333
dtype: float64
由于means
方法会返回一个系列,因此您必须明确地将mean
设为数据框。
要将其另存为制表符分隔的文本文件,请使用:means.to_csv('means.txt', sep='\t')