快捷搜索:  汽车  科技

python pandas多层级索引教程(Python科学计算库Pandas)

python pandas多层级索引教程(Python科学计算库Pandas)基本创建方式:Panel :三维的数组,可以理解为DataFrame的容器。目前,Pandas 中的数据结构有3 种:Series、DataFrame和Panel。Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。Index(行)和columns(列)。

Pandas 是Python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,Pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和Python数据分析(data analysis)。

  • Pandas是Python的一个数据分析包,该工具为解决数据分析任务而创建。
  • Pandas纳入大量库和标准数据模型,提供高效的操作数据集所需的工具。
  • Pandas提供大量能使我们快速便捷地处理数据的函数和方法。
  • Pandas是字典形式,基于NumPy创建,让NumPy为中心的应用变得更加简单。

python pandas多层级索引教程(Python科学计算库Pandas)(1)

查看Pandas 版本

>>> import pandas as pd

>>> pd.__version__

'0.24.2'

Pandas 中的数据结构

目前,Pandas 中的数据结构有3 种:Series、DataFrame和Panel。

Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。

DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。Index(行)和columns(列)。

Panel :三维的数组,可以理解为DataFrame的容器。

Series 数据结构

基本创建方式:

pd.Series(data=None index=None)

data:传入数据,可以传入多种类型;

index:索引,在不指定index的情况下,默认数值索引 range(0 len(data))。

如下是Series操作示例:

>>> data=[0 1 2]

>>> index=["a" "b" "c"]

>>> s=pd.Series(data=data index=index)

>>> s

a 0

b 1

c 2

dtype: int64

>>> s.index

Index(['a' 'b' 'c'] dtype='object')

>>> s.values

array([0 1 2] dtype=int64)

>>> s.dtype

dtype('int64')

python pandas多层级索引教程(Python科学计算库Pandas)(2)

不指定 index的情况下Series,索引默认为([0 1 2]。

>>> s1=pd.Series(data=data)

>>> s1

0 0

1 1

2 2

dtype: int64

传入字典数据,key 解析为 index,value 解析为 data。

>>> data1={"aa":10 "bb":100 "cc":1000}

>>> s2=pd.Series(data1)

>>> s2

aa 10

bb 100

cc 1000

dtype: int64

python pandas多层级索引教程(Python科学计算库Pandas)(3)

DataFrame 数据结构

基本创建方式

pd.DataFrame(data=None index=None columns=None)

DataFrame 既有行索引,也有列索引。

创建DataFrame操作示例:

>>> data=np.arange(6).reshape(2 3)

>>> data

array([[0 1 2]

[3 4 5]])

>>> index=["a" "b"]

>>> columns=["col1" "col2" "col3"]

>>> df1=pd.DataFrame(data index columns)

python pandas多层级索引教程(Python科学计算库Pandas)(4)

无行、列索引传入的情况

>>> df2=pd.DataFrame(data)

>>> df2

0 1 2

0 0 1 2

1 3 4 5

DataFrame 数据清洗示例

(1)构建DataFrame对象

>>> df=pd.DataFrame(np.random.randint(1 10 [5 3]) index=['a' 'c' 'e' 'f' 'h'] columns=['one' 'two' 'three'])

>>> df

one two three

a 1 6 3

c 5 6 6

e 2 9 3

f 5 5 6

h 1 4 1

python pandas多层级索引教程(Python科学计算库Pandas)(5)

(2)DataFrame 赋值操作

>>> df.loc["a" "one"]=np.NaN

>>> df.loc["c" "two"]=-99

>>> df.loc["c" "three"]=-99

>>> df.loc["a" "two"]=-100

>>> df

one two three

a NaN -100 3

c 5.0 -99 -99

e 2.0 9 3

f 5.0 5 6

h 1.0 4 1

增加2列(columns):

>>> df['four']='bar'

>>> df['five']=df['one']>0

python pandas多层级索引教程(Python科学计算库Pandas)(6)

reindex 创建行索引,没有的行数据,默认为NaN。

>>> df2=df.reindex(['a' 'b' 'c' 'd' 'e' 'f' 'g' 'h'])

python pandas多层级索引教程(Python科学计算库Pandas)(7)

df2.dropna(axis=0) 删除缺失值所在行(axis=0)或列(axis=1);

df2.fillna(0) 缺失值以 0 填充;

python pandas多层级索引教程(Python科学计算库Pandas)(8)

(3)标识和删除重复行

duplicated() 返回bool 向量,其长度为行数,并指示行是否重复。

python pandas多层级索引教程(Python科学计算库Pandas)(9)

其中 d/g 行数据全部为 NaN,完全重复,返回 True,其他返回 False。

其中b 行数据也全部为NaN,为什么返回 False呢?这是因为还有一个keep参数,默认为first,表示第一次出现的时候保留,之后的数据标记/删除。

如果将传入参数 keep='last' ,看到 b/d 行返回为 True,g行数据保留。

python pandas多层级索引教程(Python科学计算库Pandas)(10)

如果传入参数 keep=False,则表示标记/删除所有重复项。

python pandas多层级索引教程(Python科学计算库Pandas)(11)

df2.drop_duplicates(keep='first')

删除重复的行,keep 参数设置为保留第一次出现的行,之后重复行删除。

python pandas多层级索引教程(Python科学计算库Pandas)(12)

df2.drop_duplicates('one' keep='first')

针对one列,删除重复行数据,keep参数设置为 first。如下所示,删除了 b/f 行的数据,因为one列存在重复的数据。

python pandas多层级索引教程(Python科学计算库Pandas)(13)

猜您喜欢: