2016-07-18 5 views
0

이 오류는 대개 float 또는 소수가 int() 함수로 전달 되었기 때문에 발생합니다. 그러나, 나는 그것이 지금 나의 프로그램에 어떻게 적용되는지 이해하지 못한다. 나는 dateparse이라는 함수를 사용하여 일반 파일 형식의 날짜를 구문 분석하여 date_time 형식을 따르는 csv 파일을 만듭니다.date_parser가 실패 함 : int()에 기수 10의 '월'이 포함 된 유효하지 않은 리터럴

names=dates['Year','Month','Day','Hour','Minute',\ 
'T2 (WRF)', 'TSK (WRF)', 'LH (WRF)','HS (WRF)', 'Q2 (WRF)',\ 
'U10 (WRF)','V10 (WRF)','PSFC (WRF)','ZNT (WRF)','SWDOWN (WRF)','RAINNC (WRF)'] 

def dateparse(Y, m, d, H, M): 
    a = pd.datetime(int(Y), int(m), int(d), int(H), int(M)) 
    return(a) 

df=pd.read_csv(filein,delim_whitespace=True,\ 
header=None, names=names, parse_dates={'date_time': dates},\ 
date_parser=dateparse, index_col='date_time') 
df.to_csv(fileout+'.csv', index=True) 

내 데이터는 다음과 같습니다, 모두 같은 포맷 :

2014 06 28 12 00 298.406 296.388 8.60505e-05 -11.8442 0.00890335 -0.125414 -0.681333 96967.9 0.79537 0 0 
2014 06 28 13 00 298.6 296.854 9.5607e-05 -10.5284 0.00823525 -1.04711 -0.317631 97030 0.79537 19.3502 0 
2014 06 28 14 00 301.66 303.488 0.000109433 30.6269 0.00898107 0.000669297 -1.06901 97086.2 0.79537 213.257 0 
2014 06 28 15 00 302.186 307.853 0.000169239 128.347 0.00898755 0.993213 -1.16031 97081.7 0.79537 433.372 0 
2014 06 28 16 00 303.145 312.31 0.000230749 219.192 0.00874303 0.644703 -0.80952 97137.6 0.79537 639.32 0 

그래서 헤더는 년, 월, 일,시, 분이어야합니다 나는 다음과 같은 코드가 있습니다. 이 모든 것은 정수이며 왜 이것이 오류를 던지고 있는지 이해할 수 없습니다. 나는이 프로그램을 이전과 비슷한 형식의 매우 유사한 데이터로 작업 해 보았습니다.

답변

0

제로 선도하는 문자열은 당신이 후 다음 작업을 수행하는 경우가 작동, int로 변환 할 수 없습니다 :

In [36]: 

import io 
t="""2014 06 28 12 00 298.406 296.388 8.60505e-05 -11.8442 0.00890335 -0.125414 -0.681333 96967.9 0.79537 0 0 
2014 06 28 13 00 298.6 296.854 9.5607e-05 -10.5284 0.00823525 -1.04711 -0.317631 97030 0.79537 19.3502 0 
2014 06 28 14 00 301.66 303.488 0.000109433 30.6269 0.00898107 0.000669297 -1.06901 97086.2 0.79537 213.257 0 
2014 06 28 15 00 302.186 307.853 0.000169239 128.347 0.00898755 0.993213 -1.16031 97081.7 0.79537 433.372 0 
2014 06 28 16 00 303.145 312.31 0.000230749 219.192 0.00874303 0.644703 -0.80952 97137.6 0.79537 639.32 0""" 
df = pd.read_csv(io.StringIO(t), delim_whitespace=True, parse_dates=[['Year','Month','Day','Hour','Minute']], names = ['Year','Month','Day','Hour','Minute',\ 
'T2 (WRF)', 'TSK (WRF)', 'LH (WRF)','HS (WRF)', 'Q2 (WRF)',\ 
'U10 (WRF)','V10 (WRF)','PSFC (WRF)','ZNT (WRF)','SWDOWN (WRF)','RAINNC (WRF)']) 
df 

Out[36]: 
    Year_Month_Day_Hour_Minute T2 (WRF) TSK (WRF) LH (WRF) HS (WRF) \ 
0   2014 06 28 12 00 298.406 296.388 0.000086 -11.8442 
1   2014 06 28 13 00 298.600 296.854 0.000096 -10.5284 
2   2014 06 28 14 00 301.660 303.488 0.000109 30.6269 
3   2014 06 28 15 00 302.186 307.853 0.000169 128.3470 
4   2014 06 28 16 00 303.145 312.310 0.000231 219.1920 

    Q2 (WRF) U10 (WRF) V10 (WRF) PSFC (WRF) ZNT (WRF) SWDOWN (WRF) \ 
0 0.008903 -0.125414 -0.681333  96967.9 0.79537  0.0000 
1 0.008235 -1.047110 -0.317631  97030.0 0.79537  19.3502 
2 0.008981 0.000669 -1.069010  97086.2 0.79537  213.2570 
3 0.008988 0.993213 -1.160310  97081.7 0.79537  433.3720 
4 0.008743 0.644703 -0.809520  97137.6 0.79537  639.3200 

    RAINNC (WRF) 
0    0 
1    0 
2    0 
3    0 
4    0 
In [39]: 
df['Date'] = pd.to_datetime(df['Year_Month_Day_Hour_Minute'], format='%Y %m %d %H %M') 
df 

Out[39]: 
    Year_Month_Day_Hour_Minute T2 (WRF) TSK (WRF) LH (WRF) HS (WRF) \ 
0   2014 06 28 12 00 298.406 296.388 0.000086 -11.8442 
1   2014 06 28 13 00 298.600 296.854 0.000096 -10.5284 
2   2014 06 28 14 00 301.660 303.488 0.000109 30.6269 
3   2014 06 28 15 00 302.186 307.853 0.000169 128.3470 
4   2014 06 28 16 00 303.145 312.310 0.000231 219.1920 

    Q2 (WRF) U10 (WRF) V10 (WRF) PSFC (WRF) ZNT (WRF) SWDOWN (WRF) \ 
0 0.008903 -0.125414 -0.681333  96967.9 0.79537  0.0000 
1 0.008235 -1.047110 -0.317631  97030.0 0.79537  19.3502 
2 0.008981 0.000669 -1.069010  97086.2 0.79537  213.2570 
3 0.008988 0.993213 -1.160310  97081.7 0.79537  433.3720 
4 0.008743 0.644703 -0.809520  97137.6 0.79537  639.3200 

    RAINNC (WRF)    Date 
0    0 2014-06-28 12:00:00 
1    0 2014-06-28 13:00:00 
2    0 2014-06-28 14:00:00 
3    0 2014-06-28 15:00:00 
4    0 2014-06-28 16:00:00 

을 그래서 여기 난 후, 하나의 컬럼으로 년 월 일의 시간과 분을 치료 `) (

In [40]: 

df.info() 
<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 5 entries, 0 to 4 
Data columns (total 13 columns): 
Year_Month_Day_Hour_Minute 5 non-null object 
T2 (WRF)      5 non-null float64 
TSK (WRF)      5 non-null float64 
LH (WRF)      5 non-null float64 
HS (WRF)      5 non-null float64 
Q2 (WRF)      5 non-null float64 
U10 (WRF)      5 non-null float64 
V10 (WRF)      5 non-null float64 
PSFC (WRF)     5 non-null float64 
ZNT (WRF)      5 non-null float64 
SWDOWN (WRF)     5 non-null float64 
RAINNC (WRF)     5 non-null int64 
Date       5 non-null datetime64[ns] 
dtypes: datetime64[ns](1), float64(10), int64(1), object(1) 
memory usage: 600.0+ bytes 
+0

이 데이터는 파일에서오고, 그래서 나는 기본적으로 그냥 t이 file.readlines을 ='합니다 to_datetime를 호출하고 format = '%Y %m %d %H %M'을 통과, 당신이 올바르게 구문 분석하는 볼 수 있습니까? –

+0

이전처럼'pandas.read_csv'를 사용하여 읽을 수 있어야합니다. – EdChum