2017-02-10 4 views
1

Мне нужна помощь в изменении данных в csv-файле, который имеет более 10000 строк по 10 каждый. Например, у меня есть этот CSV-файл:Как изменить данные каждой n-й строки с помощью панд?

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, но не нашел примера, который похож на то, что я хочу.

Спасибо за вашу помощь

ответ

2

Вы должны использовать оператор по модулю к «партии» изменить вашу колонку. Ты на правильном пути. Вам просто нужен еще один итератор для выполнения операции по модулю.

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']] 
+0

Спасибо. Это именно то, что я хотел сделать. – Ling

1

Вы можете сгруппировать каждый 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]] 
0
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)