Я не могу удалить даты из моего кадра данных после второго фильтра индекса даты и времени.Я получаю эту ошибку: ValueError: could not convert string to Timestamp
.
Создание базового набора данных (сначала просто запустите этот фрагмент, для создания кадра данных потребуется около 45 секунд):
#2016
url = "https://www.ndbc.noaa.gov/view_text_file.php?filename=42040h2016.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)
############################################################
# Buoy 42040 Data Preparation
############################################################
#Remove useless variables
df.drop(['WDIR', 'WSPD', 'GST', 'WVHT', 'DPD', 'APD', 'MWD', 'PRES', 'VIS', 'TIDE', 'VIS'],
axis = 1, inplace = 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'})
#drop rows containing headers / strings
df.iloc[24070:24080,:] #24077
df = df[df.MM.str.contains("mo") == False]
#Create date column then merge
df['Date'] = df[df.columns[0:3]].apply(lambda x: '/'.join(x.dropna().astype(int).astype(str)),axis=1)
df['Time'] = df[df.columns[3]].str.cat(df[df.columns[4]], sep=':')
df['Date.Time'] = df['Date'] + ':' + df['Time']
#Convert to numeric from objects
df = df.convert_objects(convert_numeric=True)
#Convert Date and Date.Time to pd.datetime classes
df['Date'] = pd.to_datetime(df['Date'], format = '%Y/%m/%d')
df['Date.Time'] = pd.to_datetime(df['Date.Time'], format='%Y/%m/%d:%H:%M', utc=True)
#Convert dataframe index to a datetime index, then drop other times
df = df.set_index('Date.Time')
df.drop(['hh', 'mm', 'Time', 'Date'], axis = 1, inplace = True)
#Remove 2014 data
df = df[df['YY'] != 2014]
Проверьте, еслиуказатель даты и времени работает.Выглядит хорошо.
df.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 111356 entries, 2015-01-01 00:50:00+00:00 to 2018-09-04 00:00:00+00:00
Data columns (total 6 columns):
YY 111356 non-null int64
MM 111356 non-null int64
DD 111356 non-null int64
ATMP 89208 non-null float64
WTMP 110737 non-null float64
DEWP 89221 non-null float64
dtypes: float64(3), int64(3)
memory usage: 5.9 MB
Удалите данные за февраль и март 2016 года из фрейма данных, поскольку они плохие.Здесь нет проблем:
df = df.loc[(df.index <= '2016-01-31') | (df.index >= '2016-04-01')]
Удалите декабрь 2016 года из фрейма данных, потому что это тоже плохо, но тогда возникает проблема:
df = df.loc[(df.index <= '2016-11-31') | (df.index >= '2017-01-01')]
ValueError: could not convert string to Timestamp
Если есть альтернативный метод, кто-то хотел быпредположить, что это будет наиболее ценно.
Спасибо!