pandas基础学习

1、导入两个数据分析重要的模块
import numpy as np
import pandas as pd
2、创建一个时间索引,所谓的索引(index)就是每一行数据的id,可以标识每一行的唯一值
dates = pd.date_range('20161024',periods=6)
3、创建一个6X4的数据:randn函数用于创建随机数,参数表示行数和列数,dates是上一步创建的索引列
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
4、使用字典来创建数据框,例如创建一个列名为A的数据框,索引不加则是自动创建的整数
例子1:df = pd.DataFrame({'A':np.random.randn(6)})
例子2:df = pd.DataFrame({'A':pd.Timestamp('20161024'),'B':pd.Series(1)})
假如字典内的数据长度不同,以最长的数据为准,比如B列有4行
df = pd.DataFrame({'A':pd.Timestamp('20161024'),'B':pd.Series(1,index=list(range(4)))})
5、查看数据
print(df.dtypes) #查看数据格式
print(df) #查看所有数据
print(df.head()) #查看指定前几行的数据,默认是前5行
print(df.tail()) #查看指定前几行的数据,默认是后5行
print(df.index) #查看数据索引
print(df.columns) #查看数据列名
print(df.values) #查看数据值
print(df.describe) #查看描述性统计
6、使用T来转置数据,也就是行列转换
print(df.T)
7、对数据进行排序,用到了sort,参数可以指定根据哪一列数据进行排序。

df = pd.DataFrame({'A':(22,44,33,11),'B':(111,222,333,444)})
print(df.sort(columns='A'))

 8、数据的选择,选择数据就是用到了切片和loc、at方法
df['A']  选择A列的操作
df[1:3]  还可以使用数组的切片操作,但是注意了,切片得到的是行数据,如果你想使用这个方法得到列,那就会出现错误
df['20161026':'20161028']  可以使用行标签来指定输出的行,类似于切片
df.loc[dates[0]]  DataFrame的loc方法是帮助选择数据的,比如选择索引位置为0的一行数据(注意我们是用dates作为索引的)
df.loc[:,['A','B']]  选择多列数据的写法
df.loc['20161026':'20161028',['A','B']]  选择局部数据,是行和列的交叉区域
df.loc[dates[0],'A']  只选择某一个数据,可以指定行和列
df.loc[dates[0],'A']  at方法是专门用于获取某个值的

9、DataFrame切片操作
df.iloc[3]  使用iloc方法,提取第四行数据
df.iloc[3:5,0:2]  返回4-5行,1-2列数据
df.iloc[[1,2,4],[0,2]]  可以提取不连续行和列的数
df.iloc[1:3,:]  提取某一样或者某几行的数据,保证所有列都在,可以使用一个冒号来表示所有列
df.iloc[:,1:3]  所有行,也可以用冒号来表示
df.iloc[1,1]  提取某一个值,去掉所有冒号,比如取第2行第2列的这个数
df.iat[1,1]  iat是专门提取某个数的方法,它的效率高更高,因此建议在提取单个数的时候用iat

 10、Dataframe筛选数据
df[df.D>0]  筛选D列数据中大于0的行
df[(df.D>0)&(df.C<0)]  使用&符号可以实现多条件筛选,当然是用"|"符号也可以实现多条件,只不过他是或的关系。
df[['A','B']][(df.D>0)&(df.C<0)]  我们只需要A和B列数据,而D和C列数据都是用于筛选的,可以这样写:只返回了AB两列数据
可以使用insin方法来筛选特定的值:
alist = [0.05397,0.687087,0.36545]
print(df['D'].isin(alist))

11、单列数据格式的转换
df = pd.read_csv('000917.csv',encoding='gbk')
df = df[df['涨跌幅']!='None']
df['涨跌幅'] = df['涨跌幅'].astype(np.float64)
print(type(df.loc[2,'涨跌幅']))
12、统计名称的个数
df = pd.read_csv('000917.csv',encoding='gbk')
df = df[df['涨跌幅']!='None']
df['涨跌幅'] = df['涨跌幅'].astype(np.float64)
t = df['名称'].value_counts()
print(t)
##电广传媒 3519
##G 电 广 193
##电广实业 158
##Name: 名称, dtype: int64

 12、操作多索引MultiIndex

# -*- coding: utf-8 -*-
import os
import pandas as pd
import numpy as np

#建立一个带二重索引的DataFrame

df = pd.DataFrame()
df['a'] = list(range(10,30,2))
df['b'] = df['a'] // 10

df.index.name = 'id'
df = df.set_index([df['b'],df.index],drop=False)

#对带多重索引的dataframe取值一般使用xs

df = df.xs(1,level='b')

#选取第一级b=2,id=6
#df.xs((2,6))
#使用PD.IndexSlice可以更花式的
#这里因为使用的是loc,所以返回的是引用,可以修改原值 
#IndexSlice中,每一级的index都要有对应的取值,全取则用”:”
#idx['b','id']
#idx = PD.IndexSlice
#df.loc[idx[:,[1,3,8]],'a']

print(df)

13、数据分组,数据分组的好处是你可以一次性计算得到所有分组中的统计量,比如想计算男女学生的平均成绩分别是多少
grouped = df.groupby('A') 对A列进行分组
grouped = df.groupby(['A','B']) 对A列和B列同时进行分组
14、字符串操作
s = pd.Series(list('ABCDEF'))
print(s.str.lower()) 转换小写
print(s.str.upper()) 转换大写
print(s.str.len()) 求长度

s = pd.Series(['a_b_c','c_a_b',np.nan,'f_g_h']) 切割字符串,转换成list
print(s.str.split('_'))

print(s.str.split('_').str.get(1)) 使用get方法获得列中的某个元素
print(s.str.replace('^a|b$','X',case=False)) 使用replace,replace的第一个参数是正则表达式,第二个参数是要替换成的字符串。
14、字符串提取数据
s = pd.Series(['a1','a2','b1','b2','c3','c'])
print(s.str.extract('[ab](d)')) 提取一个
print(s.str.extract('([abc])(d)')) 提取多个
print(s.str.extract('([abc])(d)?')) 你要灵活使用问号,它表示可有可无,下面的方式可以匹配字符“c”
s.str.extract('(?P<letter>[abc](?P<digit>d)') 输出的结果包含变量名(列名)

15、填充缺失值
df.fillna(0) 使用0替代缺失值
df.fillna('missing') 用一个字符串代替缺失值
df.fillna(method='pad') 用前一个数据代替NaN:method='pad'
df.fillna(method='bfill',limit=1) 用后一个数据代替
df.fillna(df.mean()) 使用平均数或者其他描述性统计量来代替NaN
df.fillna(df.mean()['one','two']) 可以选择哪一列进行缺失值的处理
16、删除缺失数据
df.dropna(axis=0) 选择删除行,使用参数axis=0,这是最常用的方法
df.dropna(axis=1) 选择删除列
17、值替换
df.replace(0,6) 将0替换为6
df.replace([0,1,2,3,4,5],[5,4,3,2,1,0]) 列表到列表的替换
df.replace({1:11,2:12}) 使用字典映射:将1替换为11,将2替换为12
方法可以用在列上

原文地址:https://www.cnblogs.com/wumac/p/5992155.html