2015-10-01 4 views
0

Это text file имеет 65MB и содержит более 270000 строк данных:Вычислить GroupBy сумму столбца из файла с повторяющимися заголовками

Table To Be Searched MSEG 
Number of hits               273208 
Maximum No. of Entri               0 
Runtime    00:24:17 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

|Mat. Doc. |MatYr|MvT|Material |Plnt|SLoc|Batch  |Customer| Amount in LC|  Amount| Quantity|BUn| Qty in UnE|EUn|PO  |MatYr|Mat. Doc. |Order |Profit Ctr|SLED/BBD |Pstng Date|Entry Date|Time |User name | 
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 
|5000793175|2015 |101|101567 |HMU1|0001|5H03MU1A23|  |  4,421.81 |  4,421.81 |   41 |CS |   41 |CS |   |  |   |1428058 |IN1165B010|31.01.2016|04.08.2015|04.08.2015|17:35:34|WF-BATCH | 
|5000793176|2015 |101|101567 |HMU1|0001|5H03MU1A23|  |  2,372.68 |  2,372.68 |   22 |CS |   22 |CS |   |  |   |1428058 |IN1165B010|31.01.2016|04.08.2015|04.08.2015|17:35:36|WF-BATCH | 
|5000793177|2015 |101|100633 |HMU1|0001|5H04MU1R12|  |  6,746.04 |  6,746.04 |   43 |CS |   43 |CS |   |  |   |1428207 |IN1165B010|03.08.2016|04.08.2015|04.08.2015|17:35:37|WF-BATCH | 
... 
|5000793197|2015 |101|160  |HMA1|0004|   |  |   0.00 |   0.00 |  2,760 |EA |  2,760 |EA |4900085236|  |   |   |IN1165B030|   |04.08.2015|04.08.2015|17:21:49|A81808  | 
|5000793197|2015 |101|161  |HMA1|0004|   |  |   0.00 |   0.00 |  1,680 |EA |  1,680 |EA |4900085236|  |   |   |IN1165B030|   |04.08.2015|04.08.2015|17:21:49|A81808  | 
|5000793197|2015 |101|35  |HMA1|0004|   |  |   0.00 |   0.00 |  2,160 |EA |  2,160 |EA |4900085236|  |   |   |IN1165B030|   |04.08.2015|04.08.2015|17:21:49|A81808  | 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
Table To Be Searched MSEG 
Number of hits               273208 
Maximum No. of Entri               0 
Runtime    00:24:17 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
|Mat. Doc. |MatYr|MvT|Material |Plnt|SLoc|Batch  |Customer| Amount in LC|  Amount| Quantity|BUn| Qty in UnE|EUn|PO  |MatYr|Mat. Doc. |Order |Profit Ctr|SLED/BBD |Pstng Date|Entry Date|Time |User name | 
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 
|5000793197|2015 |101|90  |HMA1|0004|   |  |   0.00 |   0.00 |  6,480 |EA |  6,480 |EA |4900085236|  |   |   |IN1165B030|   |04.08.2015|04.08.2015|17:21:49|A81808  | 
|5000793197|2015 |101|149  |HMA1|0004|   |  |   0.00 |   0.00 |  1,080 |EA |  1,080 |EA |4900085236|  |   |   |IN1165B030|   |04.08.2015|04.08.2015|17:21:49|A81808  | 
|5000793197|2015 |101|182  |HMA1|0004|   |  |   0.00 |   0.00 |  770 |EA |   770 |EA |4900085236|  |   |   |IN1165B030|   |04.08.2015|04.08.2015|17:21:49|A81808  | 
... 
|5000793244|2015 |101|101772 |HMS1|0001|5H04MS1P21|  | 174,281.34 | 174,281.34 |  631 |CS |   631 |CS |   |  |   |1428186 |IN1165B058|02.11.2015|04.08.2015|04.08.2015|18:25:05|WF-BATCH | 
|5000793245|2015 |101|20000052 |HMA1|0002|0000054359|  | 95,498.88 | 49,315.20 |  4,670 |KG |  4,670 |KG |4200000840|  |   |   |IN1165B030|27.07.2016|04.08.2015|04.08.2015|18:27:44|A60694  | 
|5000793247|2015 |101|60000793 |HMA1|0002|0000054360|  | 559,879.08 | 516,786.17 | 3,887.800 |KG | 3,887.800 |KG |4200006170|  |   |   |IN1165B030|31.07.2016|05.08.2015|04.08.2015|18:37:15|A60694  | 
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 
... 

Здесь, в приведенной выше таблице я нужно подвести столбец Amount in LC. Но улов состоит в том, что он должен группироваться по MvT сначала, чем Order. такой, что мой вывод должен выглядеть следующим образом:

Mvt|Order|Sum 
101|abc|1234 
101|def|4321 
102|qwe|0981 

Но я получаю ошибки:

df = pd.read_csv('C:\Users\Administrator\Documents\GitHub\quadreader\Text.txt', sep='|') 
... 
CParserError: Error tokenizing data. C error: Expected 1 fields in line 7, saw 26 
+0

Вы пробовали прочитать урок Pandas? Или, поскольку вы новичок в Python, учебник Python? – Evert

+0

Pandas имеет функции ввода-вывода, которые могут читать файлы, подобные этим за один раз (в этом случае вы можете указать разделитель, например '|'); поиск документов. – Evert

+0

'df = pd.read_csv ('C: \ Users \ Administrator \ Documents \ GitHub \ quadreader \ Text.txt', sep = '|')' Я сделал это, но все равно получаю ошибку. –

ответ

0

Попробуйте этот подход - функция read_csv с параметрами:

sep='|' - Сепаратор |
error_bad_lines=False - пропустить неверные строки
skiprows=6 - первый заголовок в файле пропускается
quoting=csv.QUOTE_NONE - удалить ошибку: CParserError: Error tokenizing data. C error: EOF... usecols=['MvT', 'Order', 'Amount in LC'] - использовать только столбцы для GroupBy, другие пропускаются, снижение памяти, используя
header=None - потому что белые-пространств в именах столбцов
names=['dummy1','Mat. Doc.','MatYr',... - определенные имена столбцов

import pandas as pd 
import numpy as np 
import csv 

df = pd.read_csv('All_in_one_MSEG_01.08_28.08.TXT', sep='|', error_bad_lines=False, skiprows=6, quoting=csv.QUOTE_NONE, usecols=['MvT', 'Order', 'Amount in LC'], header=None, 
names=['dummy1','Mat. Doc.','MatYr','MvT','Material','Plnt','SLoc','Batch','Customer','Amount in LC','Amount','Quantity','BUn','Qty in UnE','EUn','PO','MatYr','Mat. Doc.','Order','Profit Ctr','SLED/BBD','Pstng Date','Entry Date','Time','User name','dummy2']) 

with pd.option_context('display.max_rows', 10, 'display.max_columns', 30): 
    print df 
#remove ------ rows 
df = df.dropna(subset=['MvT']) 
#remove headers texts in data 
df = df[df.MvT != 'MvT'] 
#reset index 
df = df.reset_index() 
#remove , in thousands e.g. 1,000.25 to 1000.25 
df = df.applymap(str).replace(r'\,','',regex=True) 
#remove column index 
del df['index'] 
#change column Amount in LC to float 
df['Amount in LC'] = df['Amount in LC'].astype(float) 
#groupby, summed and reset multiindex 
df = df.groupby(['MvT', 'Order']).sum().reset_index() 
print df.head(5) 
# MvT  Order Amount in LC 
#0 101    4.312194e+09 
#1 101 1127688 2.805714e+06 
#2 101 1127689 6.071426e+04 
#3 101 1127690 3.143515e+05 
#4 101 1127691 3.197484e+05 
Смежные вопросы