专注于快乐的事情

Pandas学习

简介

Pandas是在NumPy 基础上建立的新程序库,提供了一种高效的DataFrame 数据结构。DataFrame 本质上是一种带行标签和列标签、支持相同类型数据和缺失值的多维数组。
pandas的数据结构主要分成三种:Series(一维数组),DataFrame(二维数组),和Panel(三维数组)

开始
import numpy as np
import pandas as pd
pd.version

创建

Series

普通

NumPy 数组通过隐式定义的整数索引获取数值,而Pandas的Series对象用一种显式定义的索引与数值关联。

data = pd.Series([0.25, 0.5, 0.75, 1.0], index=[‘a’, ‘b’, ‘c’, ‘d’])

产生的数据如下:

a    0.25
b    0.50
c    0.75
d    1.00

如果不指定index,会自动加入0-n的整数索引。

根据字典来进行创建

population_dict = {‘California’: 38332521,
‘Texas’: 26448193,
‘New York’: 19651127,
‘Florida’: 19552860,
‘Illinois’: 12882135}

population = pd.Series(population_dict)

结果:

California    38332521
Texas         26448193
New York      19651127
Florida       19552860
Illinois      12882135
dtype: int64

和字典不同,Series 对象还支持数组形式的操作,比如切片。

DataFrame

通过Series 对象创建

DataFrame可以理解为Series的容器,多个Series共用一个索引。

states=pd.DataFrame(population, columns=[‘population’])

states = pd.DataFrame({‘population’: population,
‘area’: area})

通过数据字典来进行创建

d = {‘one’ : pd.Series([1., 2., 3.], index=[‘a’, ‘b’, ‘c’]),’two’ : pd.Series([1., 2., 3., 4.], index=[‘a’, ‘b’, ‘c’, ‘d’])}
df = pd.DataFrame(d)
df

最外边的字典对应列

one    two
a    1.0    1.0
b    2.0    2.0
c    3.0    3.0
d    NaN    4.0

通过NumPy二维数组创建

import numpy as np
sample = pd.DataFrame(np.random.randn(4, 5),
columns=[‘a’,’b’,’c’,’d’,’e’])
sample

    a    b    c    d    e
0    -1.058367    -0.801376    -0.647295    -0.819267    0.024554
1    0.621486    1.598847    -1.604502    0.552664    -0.430284
2    -0.131764    0.234944    -0.390586    -0.653918    0.755551
3    -1.905653    0.484355    0.203149    -1.740032    1.652118

根据已有的列创建新列

a=pd.read_csv('closeprice.csv',encoding='gbk')
b={1:'银行',2:'房地产',4:'医药生物',5:'房地产',6:'采掘',7:'休闲服务',8:'机械设备'}
a['ind']=a.ticker.map(b)
a

#其他操作

数据读取

sample=pd.read_csv('closeprice.csv',encoding='gbk',dtype={'ticker': str})
sample

切片和筛选

DataFrame有三种切片方法,分别为loc,iloc和ix。

iloc方法只能使用数值作为索引选择行、列,loc方法在选择列时只能使用字符索引,ix方法则可以使用两种索引。

df.loc第一个参数是行标签,第二个参数为列标签。:,表示所有行。

sample.loc[:,['ticker','closePrice']]

ix已经过期,如需要使用

sample.loc[sample.index[[0, 1, 2]], [‘ticker’,’closePrice’]]

ix或loc选择时,行索引是前后都包括的,而iloc为前包后不包。

查询

a[(a.closePrice>10) & (a.secShortName==’万科A’)]

使用query

Pandas数据框提供了方法query,可以完成指定的条件查询

a.query(‘closePrice>20’)

其他

a[a[‘closePrice’].between(0,9.12,inclusive=False)]

不希望边界包含在内可以将inclusive参数设定为False

使用isin方法进行查询,进行字符匹配

a[a['secShortName'].isin(['世纪星源','万科A'])]

进行正则表达式匹配进行查询,可使用str.contains

a[a[‘secShortName’].str.contains(‘[万]+’)]

排序

sample.sort_values(‘score’,ascending=False,na_position=’last’)

ascending=False代表降序排列,设定为True时表示升序排列(默认);na_position=’last’表示缺失值数据排列在数据的最后位置(默认值),设定为’first’表示缺失值排列在数据的最前面

重复行处理

Pandas提供查看、处理重复数据的方法duplicated和drop_duplicates

data = pd.DataFrame({'k1': ['one'] * 3 + ['two'] * 4, 'k2': [3, 2, 1, 3, 3, 4, 4]})
data[data.duplicated()]
data.drop_duplicates()
data.drop_duplicates(subset=['k1'],keep='last')

删除列

a.drop('Unnamed: 0', axis='columns')

或者
a.drop(‘Unnamed: 0’, axis=1)

重命名列名

a.rename(columns={'Unnamed: 0':'id'})

替换

在一些特定场合下,如错误值处理、异常值处理,可能会对原数据的某些值进行修改,此时会涉及类似SQL的insert或update操作。

单个替换
a.replace(1,np.nan)

遇到一次替换多个值时,使用字典形式,

`sample.replace({'score':{999:np.nan},
        'name':{'Bob':np.nan}})`

score列所有取值为999的值替换为NaN,name列中取值为’Bob’替换为NaN

参考网站

https://www.cnblogs.com/prpl/p/5537417.html
https://apachecn.github.io/pandas-doc-zh/io.html#io-read-csv-table

评论系统未开启,无法评论!