稍微了解numpy后,再来看pandas的概念较为清爽些
import pandas as pd
seri = pd.Series([1,2,4])
seri
0 1
1 2
2 4
dtype: int64
seri.index
RangeIndex(start=0, stop=3, step=1)
seri.values
array([1, 2, 4], dtype=int64)
seri.dtype
dtype('int64')
再看一个不同的情况
seri2 = pd.Series([1,2,'日本','日本',2])
seri2
0 1
1 2
2 日本
3 日本
4 2
dtype: object
seri2.value_counts()
2 2
日本 2
1 1
dtype: int64
不同数据类型不能sort,当然实际情况下,几乎不会有一个Series的元素不同数据类型
seri2.sort_values()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
c:\python\lib\site-packages\pandas\core\series.py in _try_kind_sort(arr)
2786 # if kind==mergesort, it can fail for object dtype
-> 2787 return arr.argsort(kind=kind)
2788 except TypeError:
TypeError: '<' not supported between instances of 'str' and 'int'
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
in
----> 1 seri2.sort_values()
c:\python\lib\site-packages\pandas\core\series.py in sort_values(self, axis, ascending, inplace, kind, na_position)
2799 idx = ibase.default_index(len(self))
2800
-> 2801 argsorted = _try_kind_sort(arr[good])
2802
2803 if is_list_like(ascending):
c:\python\lib\site-packages\pandas\core\series.py in _try_kind_sort(arr)
2789 # stable sort not available for object dtype
2790 # uses the argsort default quicksort
-> 2791 return arr.argsort(kind='quicksort')
2792
2793 arr = self._values
TypeError: '<' not supported between instances of 'str' and 'int'
也可以通过字典来生成Series,字典键值将是Series的index
seri3 = pd.Series({'张三':85,'李四':34,'王五':88})
seri3
张三 85
李四 34
王五 88
dtype: int64
seri3.values
array([85, 34, 88], dtype=int64)
seri3.index
Index(['张三', '李四', '王五'], dtype='object')
seri3.sort_values()
李四 34
张三 85
王五 88
dtype: int64
也可以这样生成
seri4 = pd.Series([45,56,78],index=['张','李','钱'])
seri4
张 45
李 56
钱 78
dtype: int64
这是一种创建方式,但是通常我们都是直接从dataframe里面取一个series,而非直接创建
下面看看怎么访问
seri4['张']
45
seri4[seri4 > 60]
钱 78
dtype: int64
从这里我们发现Series是dict like object,可以相互转化
info_dict = dict(seri4)
info_dict
{'张': 45, '李': 56, '钱': 78}
还可以给Series更换index,给index起名字
seri4
张 45
李 56
钱 78
dtype: int64
seri5 = pd.Series(seri4,index=['z','li','qian'])
seri5
z NaN
li NaN
qian NaN
dtype: float64
seri6 = pd.Series(seri4,index=['张','钱','周'])
seri6
张 45.0
钱 78.0
周 NaN
dtype: float64
seri6['周'] = 95
seri6
张 45.0
钱 78.0
周 95.0
dtype: float64
可以通过指定index来挑拣出新的series元素——很像dict,但比dict强大
lst = list(seri6)
lst
[45.0, 78.0, 95.0]
Series也可以转换成list,——seri6.values是array的缘故
接下来我们改改index的名字
seri6.index.name = '姓名'
seri6
姓名
张 45.0
钱 78.0
周 95.0
dtype: float64
seri6.name = '成绩'
seri6
姓名
张 45.0
钱 78.0
周 95.0
Name: 成绩, dtype: float64
接下来我们预见一下dataframe的特性
df = pd.DataFrame({'姓名':['张三','李四','钱舒同','杨超越'],
'成绩':[76, 73, 88, 65],
'性别':['男','男','女','女'],
})
df
|
姓名 |
成绩 |
性别 |
0 |
张三 |
76 |
男 |
1 |
李四 |
73 |
男 |
2 |
钱舒同 |
88 |
女 |
3 |
杨超越 |
65 |
女 |
df1 = pd.DataFrame(df,columns=['姓名','性别'])
df1
|
姓名 |
性别 |
0 |
张三 |
男 |
1 |
李四 |
男 |
2 |
钱舒同 |
女 |
3 |
杨超越 |
女 |
这种从series新建series,从dataframe新建dataframe的方式真的很handy
df1.index.name = '序号'
df1
|
姓名 |
性别 |
序号 |
|
|
0 |
张三 |
男 |
1 |
李四 |
男 |
2 |
钱舒同 |
女 |
3 |
杨超越 |
女 |