2016-09-10 211 views
3

l有一個41年的數據集,我想通過使用Pandas模塊做一些統計計算。但是,我缺乏熊貓的知識。 這裏有一個例子csv文件集:熊貓groupby方法

date day month year pcp1 pcp2 pcp3 pcp4 pcp5 pcp6 
1.01.1979 1 1 1979 0.431 2.167 9.375 0.431 2.167 9.375 
2.01.1979 2 1 1979 1.216 2.583 9.162 1.216 2.583 9.162 
3.01.1979 3 1 1979 4.041 9.373 23.169 4.041 9.373 23.169 
4.01.1979 4 1 1979 1.799 3.866 8.286 1.799 3.866 8.286 
5.01.1979 5 1 1979 0.003 0.051 0.342 0.003 0.051 0.342 
6.01.1979 6 1 1979 2.345 3.777 7.483 2.345 3.777 7.483 
7.01.1979 7 1 1979 0.017 0.031 0.173 0.017 0.031 0.173 
8.01.1979 8 1 1979 5.061 5.189 43.313 5.061 5.189 43.313 

這裏是我的代碼:PCP的

import numpy as np 
import pandas as pd 
import csv 

filename="output813b.csv" 
cols = ["date","year","month","day" ,"pcp1","pcp2","pcp3","pcp4","pcp5","pcp6"] 
data1=pd.read_csv(filename,sep=',', header=None,names=cols,usecols=range(1,9)) 
colmns_needed=["month" ,"pcp1","pcp2","pcp3","pcp4","pcp5","pcp6"] 
data2=pd.read_csv(filename,sep=',', header=None,names=colmns_needed) 
mm=data2.groupby("month") 
print(mm.sum()) 
print('\n') 

但值下似乎列存儲爲字符串。 這裏是pcp1例如輸出:

Month pcp1 

1  0.4310.4720000.91800000.01011.63904.65900.5780... 
10  00.1500000000.027000.02400.1630.9610000000.017... 
11  00.4940000000000.0480.003012.26200000003.612.9... 
12  0.1890.0760.47000000000.08800.1080.26107.15000... 
13  00.06500.1060.00700000050.6207.1510.0860.1487.... 
14  0000.64200000000.017025.5910.93400.04500000000... 
15  0.742000.0720000000000.32500000000002.9877.512... 
16  6.43900000000000.38103.986000000000033.5534.76... 
17  0.0890000.2750000.555001.9230.562.9130.1360000... 
18  3.28200000000.024000.656002.1750000000008.2434... 
19  1.28200000000000000.0070000000007.0383.0450.17... 
2  1.2160.1050000000010.4690.2092.9700.0415.6062.... 
20  00.4960.05100000000000.3550.1582.8530.04600000... 
21  00000000000002.69903.5190.13000002.830.5151.09... 
22  0000000007.19600000000000001.4421.76500.04500.... 
23  0000000008.168000.02100000000000.1083.8760.968... 

如何CAN L解決這個問題?

+0

你可以通過print(data2.dtypes)來檢查列的dtype嗎? (或者如果它們都存在'print(data2.info())') – ayhan

+0

all dtypes = object –

+1

你可以嘗試將它們轉換爲數字嗎? 'data2.loc [:,'pcp1':'pcp6'] = data2.loc [:,'pcp1':'pcp6']。astype('float')' – ayhan

回答

2

請勿在您的read_csv調用中指定header=None。您正在告訴函數數據中沒有標題行,根據上面發佈的示例數據,文件的第一行是標題。因此,它會將第一個標題行視爲數據,從而混合pcp10.431等值,並將所有列解釋爲字符串。

+1

這其實是真的。我想如果有一個標題行,它會出現在總和(或連接字符串)中,但顯然不是。 – ayhan

+1

你是對的,我把「header = None」改爲「header = 10」,然後解決了。感謝您的所有努力和幫助,Ayhan和Sparc_spread。 –

+1

@ömersarı如果你通過'header = 10',它會讀第10行作爲標題(它會跳過第9個)。你可以刪除那部分;你不需要指定一個頭部參數(它會默認推斷頭部)。 – ayhan