Pandas是数据科学领域非常重要的工具,它主要可以做数据分析的处理,Pandas主要有两个主要的数据结构,一个是Series,一个是Dataframe.
一.Series创建:
1.通过py list来创建series:
s1 = pd.Series([1,2,3,4])
Series中有两部分内容,第一个内容是数据value,第二个是索引index
2.通过numpy.array来创建series:
s2 = pd.Series(np.arange(10))
3.通过字典来创建Series:
s3 = pd.Series({'1':1,'2':2,'3':3})
通常多采用第一种方式进行series的创建,创建时可以对index进行设置:
s4 = pd.Series([1,2,3,4],index=['a','b','c','d'])
Series类型可以像字典类似的来访问其中的元素;s4['A']
也可以进行series和字典之间类型的互换:s4.to_dict()
也可以人为的来更改index,例如:
index_1 = ['a','b','c','d','e']
s6 = pd.Series(s5,index = index_1)
如果某一个index下没有数据时,会返回Nan;可以先通过pd.isnull(s6),来判断其中的index有没有空的;
二.Dataframe创建:
先引入库: import numpy as np import pandas as pd from pandas import Series,DataFrame
1.通过粘贴板来创建dataframe:
df = pd.read_clipboard()
查看dataframe的列: df.columns ; 获取特定某一列的value: df.Ratings (ratings是列名)
如果想要过滤,查看某几列的dataframe,则可以新建一个dataframe:
df_new = DataFrame(df,columns=['Programming Language','Sep 2016'])
对于有的columns是有空格的,那么可以使用key的方式来获取数据:
df['Sep 2016']
如果建了一个不存在的column,则新建的column的数据为Nan;
给Dataframe赋值:
df_new['Sep 2018'] = range(0,10)
df_new['Sep 2018'] = pd.Series(np.arrange(0,10))
修改某一列中的某几个值,通过series来指定index进而进行赋值:
df_new['Sep 2018'] = pd.Series([100,200],index=[1,2])
三.Series和Dataframe的深入操作:
1.遍历dataframe的值:
for row in df.iterrows():
print(row[0][1])
2.通过Series来创建DataFrame:
df_new = DataFrame([s1,s2,s3]);
设置index来创建DataFrame:
df_new = DataFrame([s1,s2,s3], index=['Country','Capital', 'Population'])
3.Dataframe的切片操作:
dataframe数据选取列: imdb[['color','director_name']]
dataframe数据选取行iloc:
#行全部选取,列选取0,1两列
imdb.iloc[:,0:2]
如果选取的不是连续的列,则可以:
imdb.iloc[:,[0,2,4]]
dataframe数据选取行loc:
#loc取得的是label;而iloc取得的是index,即每一个元素往下走的索引
#loc得到过滤依然是选取的label值;
tmp_df.loc[15:17,:'director_name']
#选取行用的是真的索引,而不是index;选取列用的是key标;
4.reindex操作更换索引:
Series更换index:
创建带有index的Series:
s1 = Series([1,2,3,4], index=['A','B','C','D'])
s1.reindex(index=['A','B','C','D','E'])
如果是添加的index为空,需要填充数据,则:
s1.reindex(index=['A','B','C','D','E'], fill_value=10)
如果是有选择的填充数据,则:
# 对1-15进行填充数据,1到5之间按照A去赋值,5到10之间按照B去赋值;
s2.reindex(index=range(15),method='ffill')
Dataframe更换index:
# index指的是行标;column指的是列标
# np.random.rand ->给出0到1之间得25个均匀分布得随机样本;
# np.random.rand.reshape 将这些数字分成几行几列
添加index(若原来的index中没有这个index,则按照nan进行添加):
df1.reindex(index=['A','B','C','D','E','F'])
添加columns(若原来的column中没有这个column,则按照nan进行添加):
df1.reindex(columns=['c1','c2','c3','c4','c5','c6'])
如果要直接更换,则可以:
df1.rename(index={'B':'C'})
注:reindex更像查找,如果原来的表中有这样的值,则可以显示,若没有,则按照nan的值形式进行
添加;而rename则是把原来的名字换掉;
Series和Dataframe的drop操作:
直接按名字指定,但是为了防止行和列中名字出现相同的情况,故采用axis来进行选择是行还是列:
df1.drop('c1',axis=1)
注:axis为0时指的是行,为1时指的是列
四.NAN操作:
Series中删除nan的值: s1.dropna()
dataframe中删除nan的值:
# axis为0时是指对行操作:
# 1.不加how.只要有nan,则drop
# 2.how为any操作,只要有none,则drop
# 3.只有这行全部的数据都为nan,才会被删掉
df1 = dframe.dropna(axis=0,how='all')
删除的另一个参数:
# thresh参数的含义:这一行(默认是行操作)中的nan大于2个,才drop
df2 = dframe2.dropna(thresh=2)
填充:
# fillna的方法是对于是nan的值进行填充,填充的值为value
# 以下的意思是:第0列的填充0,第一列的填充1,第二列的填充;2,以此类推
dframe2.fillna(value={0:0,1:1,2:2,3:3})
五.多级index操作:
Series可以看成是一维的结构,而Dataframe可能是由多个series组成,把dataframe看成是一个二维的结构,
而多级的series就可以看成一个多维的结构,故其和dataframe是有一个转换的关系存在的;
# 方法一:多级的series通过unstack来转化为dataframe
df1 = s1.unstack()
# 方法二:通过传统的方式进行转换
df2 = DataFrame([s1['1'],s1['2']])
# dataframe也可以转换成多级的series
s2 = df1.unstack()
# 构造多级index,多级column的dataframe
df = DataFrame(np.arange(16).reshape(4,4), index=[['a','a','b','b'],[1,2,1,2]], columns=[['BJ','BJ','SH','GZ'],[8,9,8,8]])
六.Maping和Replace操作:
为dataframe再增加一列:
# 方法一:这一列是series;故选择添加一列series
df1['GDP'] = Series([1000,2000,1500], index=['A','B','C'])
# 方法二:通过map的方式添加,通过python的字典为其加上一个column
gdp_map = {"北京":1000,"上海":2000,"广州":10}
df1['GDP'] = df1['城市'].map(gdp_map)
注:# 使用map方式添加时,不用关心前面的index的值是多少;而采用Series的方式添加时,需要关心顺序以及index;
Series中的replace操作:
#把serise的value replace成我们想要的数值
s1.replace([1,2,3], [10,20,30])