使用pandas从2列重新整形数据

时间:2017-02-13 06:51:23

标签: python csv pandas

我需要一些关于使用pandas从2列重新整形数据的帮助。

我有这个csv文件(test.csv)

Axe Break   Chaplin
1   52.1    ty
2   32.2    ty
3   44.6    ty
3   99.1    ty
5   122.3   ty
3   43.2    ty
7   79.4    ty
8   45.5    ty
9   56.3    ty
0   15.4    ty
1   35.7    ty
2   23.7    ty
3   66.7    ty
4   33.8    ty
1   12.9    ty
7   34.8    ty
1   21.6    ty
3   43.7    ty
6   44.2    ty
9   55.8    ty
4   22.4    ty
3   55.6    ty
2   11.4    ty
5   54.6    ty
6   19.7    ty
7   23.5    ty
1   12.8    ty
6   34.6    ty
8   69.6    ty
9   55.8    ty

期望的结果是这样的

[[  52.1   32.2   44.6   99.1  122.3]
 [  43.2   79.4   45.5   56.3   15.4]]
[[ 35.7  23.7  66.7  33.8  12.9]
 [ 34.8  21.6  43.7  44.2  55.8]]
[[ 22.4  55.6  11.4  54.6  19.7]
 [ 23.5  12.8  34.6  69.6  55.8]]
ty

我已经尝试过,下面是示例脚本

import pandas as pd
import numpy as np

df = pd.read_csv("test2.csv")

def arrange1():
    start = 0
    for i in range(0, len(df.index)):
        if (i + 1)%10 == 0:
            result = df['Break'].iloc[start:i+1].reshape(2,5)
            start = i + 1
            print result
    print "ty"

arrange1()

虽然这个脚本确实提供了我想要的结果,但我觉得还有另一种方法可以使用Pandas来实现。

我希望我不必做

print "ty"

感谢您的帮助。

[UPDATE]

我很抱歉没有澄清我想要的东西。我希望得到的结果就像我在最后打印的“ty”所示,但我不想写

print "ty"
脚本中的

。换句话说,

print result

将打印此输出

[[  52.1   32.2   44.6   99.1  122.3]
 [  43.2   79.4   45.5   56.3   15.4]]
[[ 35.7  23.7  66.7  33.8  12.9]
 [ 34.8  21.6  43.7  44.2  55.8]]
[[ 22.4  55.6  11.4  54.6  19.7]
 [ 23.5  12.8  34.6  69.6  55.8]]
ty

1 个答案:

答案 0 :(得分:0)

使用此:

df.Break.values.reshape(3, 2, -1)

array([[[  52.1,   32.2,   44.6,   99.1,  122.3],
        [  43.2,   79.4,   45.5,   56.3,   15.4]],

       [[  35.7,   23.7,   66.7,   33.8,   12.9],
        [  34.8,   21.6,   43.7,   44.2,   55.8]],

       [[  22.4,   55.6,   11.4,   54.6,   19.7],
        [  23.5,   12.8,   34.6,   69.6,   55.8]]])

或者如果您需要清单

df.Break.values.reshape(3, 2, -1).tolist()

[[[52.1, 32.2, 44.6, 99.1, 122.3], [43.2, 79.4, 45.5, 56.3, 15.4]],
 [[35.7, 23.7, 66.7, 33.8, 12.9], [34.8, 21.6, 43.7, 44.2, 55.8]],
 [[22.4, 55.6, 11.4, 54.6, 19.7], [23.5, 12.8, 34.6, 69.6, 55.8]]]