天天看点

Pandas 基础

Pandas 简介

Pandas 基础

Pandas

Pandas 库基于 NumPy 构建,为 Python 编程语言提供易于使用的数据结构和数据分析工具。

Pandas 基础

Pandas

使用以下约定导入 Pandas

import pandas as pd           

复制

帮助

help(pd.Series.loc)           

复制

Pandas 数据结构

序列(Series)

能够保存任何数据类型的一维标记数组

s = pd.Series([1, 3, 5, 7], index=['天', '地', '玄', '黄'])           

复制

# 左侧一列为索引
s           

复制

天 1

地 3

玄 5

黄 7

dtype: int64

数据框(DataFrame)

不同类型列的二维标记数据结构,类似 Excel 表格

上面一行为列名

左侧一列为索引

- 民族 姓别 年龄
1 小武 3
2 小久 1
3 小鸭 -
data = {'姓': ['贾', '贾', '张'],
        '名': ['小武', '小久', '小鸭́'],
        '民族': ['汉', '汉', '汉'],
        '年龄': [3, 1, None]}           

复制

data           

复制

{'姓': ['贾', '贾', '张'],

'名': ['小武', '小久', '小鸭́'],

'民族': ['汉', '汉', '汉'],

'年龄': [3, 1, None]}

df = pd.DataFrame(data, columns=['姓', '名', '年龄'])           

复制

df           

复制

- 民族 姓别 年龄
1 小武 3
2 小久 1
3 小鸭 -

文件 I / O

读写 CSV

pd.read_csv('file.csv', header=None, nrows=5)
df.to_csv('myDataFrame.csv')           

复制

读写 Excel

pd.read_excel('file.xlsx')
pd.to_excel('dir/myDataFrame.xlsx', sheet_name='Sheet1')
xlsx = pd.ExcelFile('file.xls')
df = pd.read_excel(xlsx, 'Sheet1')           

复制

读取数据库

from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
pd.read_sql("SELECT * FROM my_table;", engine)
pd.read_sql_table('my_table', engine)
pd.read_sql_query("SELECT * FROM my_table;", engine)           

复制

read_sql() 是 read_sql_table() 和 read_sql_query() 的便捷包装器

pd.to_sql('myDf', engine)           

复制

选择

获取

# 获取 1 个数据
s['天']           

复制

1

# 获取 DataFrame 的子集
df[1:]           

复制

选择,布尔索引 & 设置

位置

按行和列选择单个值

df.iloc[[0], [1]]           

复制

df.iat[0, 1]           

复制

'小武'

标签

按行和列标签选择单个值

df.loc[0, '姓']           

复制

'贾'

df.at[0, '姓']           

复制

'贾'

布尔索引

s[~(s > 1)]           

复制

天 1

dtype: int64

s[(s < -1) | (s > 2)]           

复制

地 3

玄 5

黄 7

dtype: int64

df[df['年龄']>1]           

复制

设置

将序列 s 的索引 '宇' 设置为 9

s['宇'] = 9
s           

复制

天 1

地 3

玄 5

黄 7

宇 9

dtype: int64

删除(dropping)

从行中删除值(axis = 0)

s.drop(['天', '地'])           

复制

玄 5

黄 7

宇 9

dtype: int64

从列中删除值(axis = 1)

df.drop('姓', axis=1)           

复制

排序和排名

按轴标签排序

df.sort_index()           

复制

按轴的值排序

df.sort_values(by='年龄')           

复制

从小到大排序的下标

df.rank()           

复制

检索 Series / DataFrame 信息

基本信息

df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
                  index=['cobra', 'viper', 'sidewinder'],
                  columns=['max_speed', 'shield'])           

复制

(行,列)

df.shape           

复制

(3, 2)

描述索引

df.index           

复制

Index(['cobra', 'viper', 'sidewinder'], dtype='object')

描述 DataFrame 列信息

df.columns           

复制

Index(['max_speed', 'shield'], dtype='object')

DataFrame 信息

df.info()           

复制

非 NA 值的数量

df.count()           

复制

max_speed 3

shield 3

dtype: int64

摘要

总和

df.sum()           

复制

max_speed 12

shield 15

dtype: int64

累积值

df.cumsum()           

复制

最小值

df.min()           

复制

max_speed 1

shield 2

dtype: int64

最大值

df.max()           

复制

max_speed 7

shield 8

dtype: int64

最小索引值

df.idxmin()           

复制

max_speed cobra

shield cobra

dtype: object

最大索引值

df.idxmax()           

复制

max_speed sidewinder

shield sidewinder

dtype: object

摘要统计

df.describe()

均值

```python
df.mean()           

复制

max_speed 4.0

shield 5.0

dtype: float64

中位数

df.median()           

复制

max_speed 4.0

shield 5.0

dtype: float64

应用函数

f = lambda x: x*2           

复制

应用函数

df.apply(f)           

复制

按元素应用函数

df.applymap(f)           

复制

数据对齐

内部数据对齐

值 NA 在不重叠的索引中引入

s3 = pd.Series([7, -2, 3], index=['玄', '黄', '宇'])           

复制

s + s3           

复制

地 NaN

天 NaN

宇 12.0

玄 12.0

黄 5.0

dtype: float64

填充方法的算术运算

借助填充方法自行完成内部数据对齐

s.add(s3, fill_value=0)           

复制

地 3.0

天 1.0

宇 12.0

玄 12.0

黄 5.0

dtype: float64

s.sub(s3, fill_value=2)           

复制

地 1.0

天 -1.0

宇 6.0

玄 -2.0

黄 9.0

dtype: float64

s.div(s3, fill_value=4)           

复制

地 0.750000

天 0.250000

宇 3.000000

玄 0.714286

黄 -3.500000

dtype: float64

s.mul(s3, fill_value=3)           

复制

地 9.0

天 3.0

宇 27.0

玄 35.0

黄 -14.0

dtype: float64

ipynb 请查看:https://github.com/iOSDevLog/AIDevLog/blob/master/Python%20%E5%9F%BA%E7%A1%80/PandasBasic.ipynb