【问题标题】:How to reshape every nth row's data using pandas?如何使用熊猫重塑每 n 行的数据?
【发布时间】:2017-02-10 12:14:33
【问题描述】:

我需要帮助来重塑 csv 文件中的数据,该文件有超过 10000 行,每行 10 行。例如我有这个 csv 文件:

Ale Brick
1   ww
2   ee
3   qq
3   xx
5   dd
3   gg
7   hh
8   tt
9   yy
0   uu
1   ii
2   oo
3   pp
4   mm
1   ww
7   zz
1   cc
3   rr
6   tt
9   ll

我希望得到的是这种形式,其中只有“Brick”列中的数据会被重塑。

[['ww' 'ee' 'qq' 'xx' 'dd']
 ['gg' 'hh' 'tt' 'yy' 'uu']]

[['ii' 'oo' 'pp' 'mm' 'ww']
 ['zz' 'cc' 'rr' 'tt' 'll']]

我只知道如何重塑从 0 到第 9 行的数据,但不知道如何在接下来的第 10 行进行。这是我的脚本:

import pandas as pd

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

for i in range(0, len(df)):
    slct = df.head(10)
    result = slct['Brick'].reshape(2,5)

print result

此脚本只打印以下结果

[['ww' 'ee' 'qq' 'xx' 'dd']
 ['gg' 'hh' 'tt' 'yy' 'uu']]

我希望它能打印从 0 到第 9 行、第 10 到第 19 行、第 20 行到第 29 行等等的数据...

我浏览过 pandas 教程,但没有找到任何与我想要的相似的示例。

感谢您的帮助

【问题讨论】:

    标签: python csv pandas


    【解决方案1】:

    您需要使用模运算符来“批量”重塑您的列。你在正确的轨道上。你只需要另一个迭代器来做模运算。

    import pandas as pd
    
    df = pd.DataFrame({'brick': ['xx','yy','xa','bd','ev','bb','oo','pp','qq','bn','nv','bn','rr','qw','bn','cd','fd','bv','nm','ty']})
    
    start = 0  # set start to 0 for slicing
    for i in range(len(df.index)):
        if (i + 1) % 10 == 0:  # the modulo operation
            result = df['brick'].iloc[start:i+1].reshape(2,5)
            print result
            start = i + 1  # set start to next index
    

    输出:

    [['xx' 'yy' 'xa' 'bd' 'ev']
     ['bb' 'oo' 'pp' 'qq' 'bn']]
    [['nv' 'bn' 'rr' 'qw' 'bn']
     ['cd' 'fd' 'bv' 'nm' 'ty']]
    

    【讨论】:

    • 谢谢。这正是我想做的。
    【解决方案2】:

    您可以按每 10 行分组,然后重新调整值

    df.groupby(np.repeat(np.arange(len(df) / 10), 10))['Brick'].apply(lambda x: x.values.reshape(2,5))
    
    0.0    [[ww, ee, qq, xx, dd], [gg, hh, tt, yy, uu]]
    1.0    [[ii, oo, pp, mm, ww], [zz, cc, rr, tt, ll]]
    

    【讨论】:

      【解决方案3】:
      import pandas as pd
      
      df = pd.read_csv(`"`test.csv`"`)
      
      data = df['Brick']
      
      k=int(len(data)/10)+1
      
      for x in range(k):
      
          temp=data[10*x:10*(x+1)]
      
          print temp.values.reshape(2,5)
      

      【讨论】:

        猜你喜欢
        • 2018-07-27
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        • 2017-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多