KeyError: 0 when accessing value in pandas series
Question:
In my script I have df[‘Time’] as shown below.
497 2017-08-06 11:00:00
548 2017-08-08 15:00:00
580 2017-08-10 04:00:00
646 2017-08-12 23:00:00
Name: Time, dtype: datetime64[ns]
But when i do
t1=pd.Timestamp(df['Time'][0])
I get an error like this :
KeyError: 0
Do I need any type conversion here, if yes then how it can be fixed?
Answers:
You’re looking for df.iloc
.
df['Time'].iloc[0]
df['Time'][0]
would’ve worked if your series had an index beginning from 0
And if need scalar only use Series.iat
:
df['Time'].iat[0]
def get_time_slice(full_matrix, start = 0., period = 1.):
"""
Returns a slice of the given matrix, where start is the offset and period is
used to specify the length of the signal.
Parameters:
full_matrix (numpy.ndarray): matrix returned by matrix_from_csv()
start (float): start point (in seconds after the beginning of records)
period (float): duration of the slice to be extracted (in seconds)
Returns:
numpy.ndarray: 2D matrix with the desired slice of the matrix
float: actual length of the resulting time slice
Author:
Original: [lmanso]
I have also error clear to me anyone
Reimplemented: [fcampelo]
"""
# Changed for greater efficiency [fcampelo]
rstart = full_matrix[0: 0] + start
index_0 = np.max(np.where(full_matrix[: 0] <= rstart))
index_1 = np.max(np.where(full_matrix[: 0] <= rstart + period))
duration = full_matrix[index_1, 0] - full_matrix[index_0, 0]
return full_matrix[index_0:index_1, :],
Problem
In my case, since I had dropped the first row (which contained indexed headers):
df.iloc[1:]
Passing an index of 0
would fail:
df.iloc[0]
>>> KeyError: 0
Solution
Add this to the end of the Dataframe you are indexing / slicing:
df.reset_index(drop=True)
In my script I have df[‘Time’] as shown below.
497 2017-08-06 11:00:00
548 2017-08-08 15:00:00
580 2017-08-10 04:00:00
646 2017-08-12 23:00:00
Name: Time, dtype: datetime64[ns]
But when i do
t1=pd.Timestamp(df['Time'][0])
I get an error like this :
KeyError: 0
Do I need any type conversion here, if yes then how it can be fixed?
You’re looking for df.iloc
.
df['Time'].iloc[0]
df['Time'][0]
would’ve worked if your series had an index beginning from 0
And if need scalar only use Series.iat
:
df['Time'].iat[0]
def get_time_slice(full_matrix, start = 0., period = 1.):
"""
Returns a slice of the given matrix, where start is the offset and period is
used to specify the length of the signal.
Parameters:
full_matrix (numpy.ndarray): matrix returned by matrix_from_csv()
start (float): start point (in seconds after the beginning of records)
period (float): duration of the slice to be extracted (in seconds)
Returns:
numpy.ndarray: 2D matrix with the desired slice of the matrix
float: actual length of the resulting time slice
Author:
Original: [lmanso]
I have also error clear to me anyone
Reimplemented: [fcampelo]
"""
# Changed for greater efficiency [fcampelo]
rstart = full_matrix[0: 0] + start
index_0 = np.max(np.where(full_matrix[: 0] <= rstart))
index_1 = np.max(np.where(full_matrix[: 0] <= rstart + period))
duration = full_matrix[index_1, 0] - full_matrix[index_0, 0]
return full_matrix[index_0:index_1, :],
Problem
In my case, since I had dropped the first row (which contained indexed headers):
df.iloc[1:]
Passing an index of 0
would fail:
df.iloc[0]
>>> KeyError: 0
Solution
Add this to the end of the Dataframe you are indexing / slicing:
df.reset_index(drop=True)