pandas 快速教程

pandas和numpy的区别

numpy对数据进行了序列化, pandas在numpy的基础上对数据进行了字典化.
在pandas中, 一维数据的创建(带有字典型索引的ndarray)

import pandas as pd
import numpy as np
array = pd.Series(data, index, dtype, name, copy)
# data 可以是array-like型(list, tuple, dict【如果是字典型,就不应带index参数】), 以及其他iterable类型
# index 可以是array-like型或1d的index型
# name 就是这个数据的名字, 不能作为key, 只是说明数据
# copy boolean型, 是否从输入拷贝数据, 如果为False, 当修改data数据时, array数据也会被修改

创建和属性

pandas 的亲儿子是DataFrame类, 构造函数如下

df = pd.DataFrame(data, index, columns, dtype, copy)
# 其他和series相似, 多了一个columns参数, 可以对列命名, 并用这个命名索引
# columns和index 的参数类型一样, 都是array-like 或index类

用ndarray创建dataframe:

dates = pd.date_range('20190101', periods=6)
dates
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
               '2019-01-05', '2019-01-06'],
              dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
df
ABCD
2019-01-01-0.484616-0.248309-0.098313-0.683003
2019-01-021.5056060.5103351.113863-0.734523
2019-01-03-1.465088-0.7351971.016585-0.354663
2019-01-04-0.2500290.398673-0.098441-0.873569
2019-01-05-1.7783770.134948-0.239482-0.740788
2019-01-060.8629180.666206-0.4351060.643491

用字典创建DataFrame:

df2 = pd.DataFrame({ 'A' : 1.,
                    'B' : pd.Timestamp('20190102'),
                    'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                    'D' : np.array([3] * 4,dtype='int32'),
                    'E' : pd.Categorical(["test","train","test","train"]),
                    'F' : 'foo' })
df2
ABCDEF
01.02019-01-021.03testfoo
11.02019-01-021.03trainfoo
21.02019-01-021.03testfoo
31.02019-01-021.03trainfoo

DataFrame有一些常用属性或方法:

df.index # 返回行索引
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
               '2019-01-05', '2019-01-06'],
              dtype='datetime64[ns]', freq='D')
df.columns # 返回列索引
Index(['A', 'B', 'C', 'D'], dtype='object')
df.values # 返回所有值
array([[ 0.64661672,  1.33378913, -1.66105168, -0.79864461],
       [ 0.11228697,  1.61794145, -2.08530885, -0.79313203],
       [-1.58538998,  1.51130963,  0.18998638, -0.95260641],
       [-0.51939052,  0.29940983, -0.41711038,  0.35637944],
       [ 2.99021982,  0.33903874, -0.48491081, -0.96314392],
       [ 0.5022305 , -0.78227386, -1.73768114, -0.8378494 ]])
df.dtypes # 返回所有列的数据类型
A    float64
B    float64
C    float64
D    float64
dtype: object
df.describe()# 返回数据的统计值, 包括中位数, 平均值, 标准差等
ABCD
count6.0000006.0000006.0000006.000000
mean0.3577620.719869-1.032679-0.664833
std1.5257550.9368100.9136510.505763
min-1.585390-0.782274-2.085309-0.963144
25%-0.3614710.309317-1.718524-0.923917
50%0.3072590.836414-1.072981-0.818247
75%0.6105201.466930-0.434060-0.794510
max2.9902201.6179410.1899860.356379
df.sort_index(axis=1, ascending = False)# 按照索引排序, axis=[0, 1], 按行索引或列索引
DCBA
2019-01-01-0.798645-1.6610521.3337890.646617
2019-01-02-0.793132-2.0853091.6179410.112287
2019-01-03-0.9526060.1899861.511310-1.585390
2019-01-040.356379-0.4171100.299410-0.519391
2019-01-05-0.963144-0.4849110.3390392.990220
2019-01-06-0.837849-1.737681-0.7822740.502230
df.sort_values(by='D',axis=0, ascending=False) # 按照值排序, by是排序的键, axis和键对应, 要是键是列名,则是在行上调整,
# axis=0, 若键是行名, 在列上调整, axis=1 
ABCD
2019-01-04-0.5193910.299410-0.4171100.356379
2019-01-020.1122871.617941-2.085309-0.793132
2019-01-010.6466171.333789-1.661052-0.798645
2019-01-060.502230-0.782274-1.737681-0.837849
2019-01-03-1.5853901.5113100.189986-0.952606
2019-01-052.9902200.339039-0.484911-0.963144

选择

选择方法有.at, .iat, .loc, .iloc,.ix, 按列,切片,按条件等。所有带i的方法是用的行列序号, 不带的用的行列的索引键

基本取值

df.A
2019-01-01    0.646617
2019-01-02    0.112287
2019-01-03   -1.585390
2019-01-04   -0.519391
2019-01-05    2.990220
2019-01-06    0.502230
Freq: D, Name: A, dtype: float64
df['A']
2019-01-01    0.646617
2019-01-02    0.112287
2019-01-03   -1.585390
2019-01-04   -0.519391
2019-01-05    2.990220
2019-01-06    0.502230
Freq: D, Name: A, dtype: float64
df[0:3]
ABCD
2019-01-010.6466171.333789-1.661052-0.798645
2019-01-020.1122871.617941-2.085309-0.793132
2019-01-03-1.5853901.5113100.189986-0.952606
df['20190104':'20190106']
ABCD
2019-01-04-0.5193910.299410-0.4171100.356379
2019-01-052.9902200.339039-0.484911-0.963144
2019-01-060.502230-0.782274-1.737681-0.837849

通过标签索引选择

df.loc['20190102']
A    0.112287
B    1.617941
C   -2.085309
D   -0.793132
Name: 2019-01-02 00:00:00, dtype: float64
df.loc[:, ['A','B']]
AB
2019-01-010.6466171.333789
2019-01-020.1122871.617941
2019-01-03-1.5853901.511310
2019-01-04-0.5193910.299410
2019-01-052.9902200.339039
2019-01-060.502230-0.782274
df.loc[:,'A':'C']
ABC
2019-01-010.6466171.333789-1.661052
2019-01-020.1122871.617941-2.085309
2019-01-03-1.5853901.5113100.189986
2019-01-04-0.5193910.299410-0.417110
2019-01-052.9902200.339039-0.484911
2019-01-060.502230-0.782274-1.737681
df.at[dates[0], 'A']
0.6466167158704922

按位置选择

df.iloc[0, :]
A    0.646617
B    1.333789
C   -1.661052
D   -0.798645
Name: 2019-01-01 00:00:00, dtype: float64
df.iloc[1:2, [0, 3]]
AD
2019-01-020.112287-0.793132
df.iat[1,1]
1.6179414481667929

按照布尔条件选择

df[df.A > 0.6]
ABCD
2019-01-010.6466171.333789-1.661052-0.798645
2019-01-052.9902200.339039-0.484911-0.963144
df.B[df.A > 0.6]
2019-01-01    1.333789
2019-01-05    0.339039
Name: B, dtype: float64

赋值

在上述选择的基础上直接赋值即可。

添加列

通过对新列索引赋值的方式,添加新列, 用Series添加时,需要用index和原有表对齐

df['F'] = np.nan
df['G'] = pd.Series(np.random.randn(6), index=dates)

丢失数据的处理

dropna(how):按照how 的方式丢弃含有nan的条目,how=[‘any’,‘all’]

fillna(value):对nan填充value值

isna(dataFrame)返回布尔类型的遮罩,nan的项为True

Apply方法
dp.apply(func)

此处的func可以是已有的方法,例如np.cumsum,也可以是lambda表达式

df.apply(np.cumsum, axis=1)
ABCDFG
2019-01-01-0.484616-0.732925-0.831239-1.514241NaN-2.174741
2019-01-021.5056062.0159423.1298052.395282NaN3.739866
2019-01-03-1.465088-2.200285-1.183701-1.538364NaN-1.934477
2019-01-04-0.2500290.1486440.050203-0.823366NaN-2.273726
2019-01-05-1.778377-1.643429-1.882911-2.623698NaN-4.758681
2019-01-060.8629181.5291251.0940181.737509NaN2.837270
df.apply(lambda x: x.max()-x.min())
A    3.283983
B    1.401404
C    1.548970
D    1.517059
F         NaN
G    3.479566
dtype: float64

导入、导出数据

支持多种格式的读取和写入

read_csv, read_excel, read_pickel

to_csv, to_excel, to_pickel

表合并

pandas提供了多种以不同的集合操作合并pandas数据类型(Series,dataframe,panel)的工具,主要的两种是concat和merge

concat([ ], axis, join,ignore_index ...): 第一个参数是要合并的表构成的列表,axis是方向,join={‘inner’, ‘outer’},默认是outer,即取并集,缺少的部分用NaN填充,ignore_index为True时,意味着将表合并后重新编index,否则当纵向合并时,索引会重复。

merge:sql风格的合并

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值