[問題] 在python中關於讀取csv資料後進行運算

作者: processior (korman)   2018-05-08 23:16:49
先舉例 假如有一 a.csv(內容)如下:
index 職位  薪資  index 職位  薪資
0 經理   6萬   1  經理  5.5萬
2  經理  7萬   3  協理  10萬
  4 協理  8萬   5  總經理  20萬
  5 課長  4萬
csv檔內容如上,我的想法是將所有職位相同的薪資加起來除
於平均數,例如經理三位(6萬+5.5萬+7萬)/3 =6.166萬
 然後從新編排csv檔為
 index 職位  薪資
  0 經理  6.166萬
講白一點就是把相同職位的資料整還在一起,然後薪資就求他的平均值
一開始的寫法如下:
 fx = open(path,'r')
fxr = csv.reader(fx)
for row in fxr:
開始主程式對資料內容進行判讀
 這種寫法很直觀也很笨,隨著檔案越來越大 執行的速度也不夠快
我想請問是否有沒有哪些python的模組是可以做csv檔案的重新彙整
而且可以對內容值作相互運算(加減乘除之類的)
 我之前有看pandas 的dataframe 好像不錯用 但是他好像沒有對單一列行
的某個值可以做加減乘除用算的功能,不知有沒有版友知道有沒有更棒的
的模組又或者pandas就可以做得到我想要的功能。
     
作者: justoncetime (台北叢林好冷~)   2018-05-08 23:35:00
如果CSV很大,逐列是省記憶體吧(空間換時間)?不知道Pandas遇到很大CSV記憶體會不會爆?
作者: processior (korman)   2018-05-08 23:37:00
是希望運算時間可以快一點
作者: kenduest (小州)   2018-05-08 23:45:00
就 pandas 來處理,語法可以很乾淨達成需求df = pandas.read_csv('file.csv')df.groupby(['title'])['salary'].agg(['mean'])大概這樣的概念??
作者: ThxThx (洗洗睡)   2018-05-09 05:14:00
這樣的想法很直觀可是沒有很笨Simple is better than complex你有用profiler 確定慢是慢在哪裡?但如果想要簡潔一些 pandas的確可以用在你的問題上
作者: bestchiao (呼拉拉)   2018-05-09 11:04:00
k大的方式可以解決你的問題 但不知你的資料量有多少?
作者: kenduest (小州)   2018-05-09 12:21:00
若是太多就進資料庫,用 sql groupby 處理也很快

Links booklink

Contact Us: admin [ a t ] ucptt.com