Как импортировать файлы данных NOAA-CRN? - PullRequest
0 голосов
/ 08 февраля 2019

Я скачал .txt файлы данных NOAA-CRN, которые после удаления данных, которые мне не интересны, и сохранены как .csv выглядят так:

4           5           10
LST_DATE    LST_TIME    T_HR_AVG
YYYYMMDD    HHmm         Celsius
20150101    0           20.9
20150101    100         20.9
20150101    200         21
20150101    300         20.7
20150101    400         20.6
20150101    500         20.8

Я хочу прочитать файлы сПанды и конвертировать дату и время в формате (потому что это формат, используемый данными из других агентств):

2015-01-01 00:00:00.

Но я застрял, кажется, ничего не работает.Я использую этот код для чтения файла:

parse = (lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%m'))
#Import for Everglades City (CRN Station)
Y= pd.read_csv('/file.csv',
              delimiter=',', header = None, engine = 'python',
              skiprows= 3,
              usecols = [0,1,2], 
              parse_dates = [[0,1]], date_parser = parse,
                index_col=0,
               )`

Что дает:

TypeError: <lambda>() takes 1 positional argument but 2 were given

Это происходит из-за того, что Python не может обрабатывать формат даты и времени YYYYMMDD HHmm?Помощь будет оценена.

1 Ответ

0 голосов
/ 08 февраля 2019

Существует проблема с форматом времени, возможное решение:

import pandas as pd

temp=u"""4;5;10
LST_DATE,LST_TIME,T_HR_AVG
YYYYMMDD,HHmm,Celsius
20150101,0,20.9
20150101,100,20.9
20150101,200,21
20150101,300,20.7
20150101,400,20.6
20150101,500,20.8"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
#parse = (lambda x: pd.datetime.strptime(x, '%Y%m%d %H'))

df = pd.read_csv(pd.compat.StringIO(temp), 
                 skiprows= 2,
                 usecols = [0,1,2],
                 )

print (df)
   YYYYMMDD  HHmm  Celsius
0  20150101     0     20.9
1  20150101   100     20.9
2  20150101   200     21.0
3  20150101   300     20.7
4  20150101   400     20.6
5  20150101   500     20.8

dates = df.pop('YYYYMMDD').astype(str) + df.pop('HHmm').astype(str).str.zfill(4)
df.index = pd.to_datetime(dates)

print (df)
                     Celsius
2015-01-01 00:00:00     20.9
2015-01-01 01:00:00     20.9
2015-01-01 02:00:00     21.0
2015-01-01 03:00:00     20.7
2015-01-01 04:00:00     20.6
2015-01-01 05:00:00     20.8
...