Series data structure in pandas
Your series is indeed homogeneously-typed and you can check it's type:

s = pd.Series(data=[1,2,3,4,5,'x'], index=['a','b','c','d','e','f'])
s.dtype
&gt; dtype('O')


where 'O' is for "object". However, if you check the type of the individual elements of your series, they are different:

type(s['a'])
&gt; int
type(s['f'])
&gt; str


I think the key thing to remember is that if your Series or DataFrame Column is non homogenously-typed (eventhough technically homogeneously-typed of type "object"), then there are certain pandas functions that won't work.

Here is a better explanation from the pandas documentation's Essential Basic Functionality:


  If a DataFrame or Panel contains homogeneously-typed data, the ndarray
  can actually be modified in-place, and the changes will be reflected
  in the data structure. For heterogeneous data (e.g. some of the
  DataFrame’s columns are not all the same dtype), this will not be the
  case. The values attribute itself, unlike the axis labels, cannot be
  assigned to.
  
  Note: When working with heterogeneous data, the dtype of the resulting ndarray will be chosen to accommodate all of the data
  involved. For example, if strings are involved, the result will be of
  object dtype. If there are only floats and integers, the resulting
  array will be of float dtype.