2016-09-10 4 views
3

Ich habe einen Datensatz für 41 Jahre und möchte einige statistische Berechnungen mit einem Pandas-Modul durchführen. Mir fehlt jedoch das Wissen der Pandas. hier ist ein Beispiel CSV-Datei-Datensatz:Pandas groupby Methode

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 

hier ist mein Code:

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') 

aber Werte unter Spalten von PCP scheint, als String gespeichert. hier wird eine Beispielausgabe für 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... 

, wie man das Problem lösen kann, l?

+0

Können Sie die Dtypes der Spalten über 'print (data2.dtypes)' überprüfen? (Oder wenn sie überhaupt existieren 'print (data2.info())') – ayhan

+0

alle dtypes = object –

+1

Können Sie versuchen, sie in Zahlen umzuwandeln? 'data2.loc [:, 'pcp1': 'pcp6'] = daten2.loc [:, 'pcp1': 'pcp6']. astype ('float')' – ayhan

Antwort

2

Geben Sie in Ihren read_csv Anrufen header=None nicht an. Sie teilen der Funktion mit, dass in den Daten keine Kopfzeile vorhanden ist, wenn die erste Zeile der Datei gemäß den oben angegebenen Beispieldaten eine Kopfzeile ist. Daher behandelt es diese erste Kopfzeile als Daten und mischt somit Werte wie pcp1 und 0.431 und bewirkt, dass alle Spalten als Zeichenfolgen interpretiert werden.

+1

Dies ist in der Tat wahr. Ich dachte, wenn es eine Kopfzeile gäbe, würde es in der Summe erscheinen (oder in der verketteten Zeichenkette), aber anscheinend nicht. – ayhan

+1

Sie hatten Recht und ich änderte "header = None" zu "header = 10" dann löste es. Danke für all deine Bemühungen und Hilfe, Ayhan und Sparc_spread. –

+1

@ ömersarı Wenn Sie 'header = 10' übergeben, wird die 10. Zeile als Überschrift gelesen (die ersten 9 werden übersprungen). Sie können diesen Teil einfach entfernen. Sie müssen keinen Header-Parameter angeben (er wird standardmäßig den Header ableiten). – ayhan