作者:手机用户2502900175 | 来源:互联网 | 2022-12-02 17:31
我正在尝试从多个列年,月和日创建一个日期列,但是我使用标准过程创建日期列时会出现一些错误.
import pandas as pd
from urllib.request import urlopen
url = "https://www.ndbc.noaa.gov/view_text_file.php?filename=42887h2017.txt.gz&dir=data/historical/stdmet/"
data_csv = urlopen(url)
df = pd.read_csv(data_csv, delim_whitespace=True, index_col=0, parse_dates=True)
#Reset Index
df.reset_index(level=0, inplace=True)
#remove 1st row contains erronous characters
df = df.iloc[1:]
#Rename Year column
df = df.rename(columns={'#YY': 'YY'})
df['Date'] = pd.to_datetime((df.YY*10000+df.MM*100+df.DD).apply(str),format='%Y%m%d')
最后一个命令无法正常工作,因为没有创建日期列.结果:
ValueError:未转换数据依然存在:420142014201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420202020202014201
1> ALollz..:
pd.to_datetime
如果它们被正确命名,它可以自动解析多个列中的日期('year', 'month', 'day', 'hour', 'minute'
)
pd.to_datetime(df[['YY', 'MM', 'DD']].rename(columns={'YY': 'year', 'MM': 'month', 'DD': 'day'}))
输出:
1 2017-01-02
2 2017-01-02
3 2017-01-02
4 2017-01-02
5 2017-01-02
...
2427 2017-03-05
2428 2017-03-05
2429 2017-03-05
2430 2017-03-05
您还可以添加小时和分钟:
pd.to_datetime(df[['YY', 'MM', 'DD', 'hh', 'mm']].rename(
columns={'YY': 'year', 'MM': 'month', 'DD': 'day',
'hh': 'hour', 'mm': 'minute'}))
#1 2017-01-02 06:00:00
#2 2017-01-02 06:20:00
#...
#2429 2017-03-05 01:40:00
#2430 2017-03-05 02:00:00