Python 科学计算库 Pandas 基本操作

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 基本操作

查看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 基本操作

不指定 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 基本操作

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 基本操作

无行、列索引传入的情况

>>> 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 基本操作

(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 基本操作

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

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

Python 科学计算库 Pandas 基本操作

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

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

Python 科学计算库 Pandas 基本操作

(3)标识和删除重复行

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

Python 科学计算库 Pandas 基本操作

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

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

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

Python 科学计算库 Pandas 基本操作

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

Python 科学计算库 Pandas 基本操作

df2.drop_duplicates(keep='first')

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

Python 科学计算库 Pandas 基本操作

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

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

Python 科学计算库 Pandas 基本操作

相关推荐