我下载了.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
我想用Pandas读取文件并以格式转换日期和时间(因为这是其他机构的数据使用的格式):
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
导致的吗?帮助将不胜感激。
答案 0 :(得分:1)
时间格式存在问题,可能的解决方法是:
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