0
Я использую q
для преобразования моего файла csv: log.csv (с файлом). Это формат:Объединить несколько файлов csv
datapath,port,rxpkts,rxbytes,rxerror,txpkts,txbytes,txerror
4,1,178,25159,0,40,3148,0
4,2,3,230,0,213,27897,0
4,3,3,230,0,212,27807,0
4,4,4,320,0,211,27717,0
4,5,3,230,0,212,27807,0
4,6,3,230,0,212,27807,0
4,7,4,320,0,211,27717,0
4,8,4,320,0,211,27717,0
4,9,4,320,0,211,27717,0
4,a,4,320,0,211,27717,0
4,b,3,230,0,212,27807,0
4,fffffffe,7,578,0,209,27549,0
3,1,197,26863,0,21,1638,0
3,2,3,230,0,215,28271,0
3,3,5,390,0,215,28271,0
3,4,2,140,0,216,28361,0
3,5,4,320,0,214,28181,0
3,6,3,230,0,215,28271,0
3,fffffffe,7,578,0,212,28013,0
5,1,208,27401,0,6,488,0
5,fffffffe,7,578,0,208,27401,0
2,1,180,24228,0,18,1368,0
2,2,2,140,0,195,25366,0
2,3,2,140,0,195,25366,0
2,4,3,230,0,194,25276,0
2,5,3,230,0,194,25276,0
2,6,2,140,0,195,25366,0
2,fffffffe,7,578,0,191,25018,0
1,1,38,5096,0,182,23602,0
1,2,42,5419,0,179,23369,0
1,3,61,7152,0,159,21546,0
1,4,28,4611,0,192,24087,0
1,5,46,6022,0,174,22676,0
1,fffffffe,7,578,0,214,28210,0
Я хочу тайному его в этот формат:
Количество портов может меняться.
Текущий код:
python q -H -d "," "select rxpkts, txpkts from ./log.csv where datapath = i and port = j" > i_j.csv;
Так что я сделал i*j
количество файлов, а затем совместили их вручную. Есть ли способ сделать это за один шаг, изменив приведенный выше код sql или скомпилировать файлы с использованием python или используя pandas как предложено в комментариях?
import subprocess
def printit():
for i in range(1,6):
for j in range(1,6):
query = "select rxpkts, txpkts from ./log.csv where datapath = "+str(i)+" and port = "+str(j)
fileName = str(i)+"_"+str(j)+".csv"
with open(fileName, "w+") as f:
p = subprocess.Popen(["python", "q", "-H", "-d", ",", query], stdout=f)
printit()
http://pandas.pydata.org/pandas-docs/stable/reshaping.html – Paul
Пожалуйста, помогите с примером – sinhayash
В приведенной выше ссылке, посмотрите на 'В работе [3]/Out [3]' и вы увидите, что он преобразует данные, где порт находится в строке, к данным, где порт находится в столбце, за исключением того, что он делает это с помощью столбца, называемого «переменная», а не «порт», и есть 1 значение, реорганизованное вместо 2. Я не вижу быстрого соответствия вашей проблеме, что может потребовать игнорирования/исключения некоторых столбцов перед использованием 'pivot'. Чтобы играть с ним, может быть полезно начать с 'import pandas as pd' (если это не сработает, установите его с помощью менеджера пакетов или, возможно,' pip install pandas') и 'df = pd.read_csv (filename) ' – Paul