基于 https://www.bilibili.com/video/BV1hx411d7jb?t=36&p=23
0. Series和DataFrame
pandas中的两种基本数据板块
Series是一个维度为1,类似于字典
DataFrame:维度为2,series的容器,或者说组成成分是series
1.Series
·创建一个Series
可以由字典转过来,也可以由直接创造
Series([data, index, dtype, name, copy, …])
Series()
index后面附的是标签,如果没有填写而默认的话,出来的是0,1,2,3…
import numpy as np
import pandas as pd
import string
a=pd.Series(np.arange(5), index=list(string.ascii_uppercase[:5]))
print("a:",a,'\n')
b={'A':10,'B':20,'C':30,'D':40,'E':50}
b=pd.Series(b)
print("b:",b,'\n')
·索引与切片
这一块它像是列表和字典的糅合物,也有上篇中的[[ ]]式来对不连续的行列进行搜查,当然也可以通过判断来搜索
a=pd.Series(np.arange(5), index=list(string.ascii_uppercase[:5]))
print("a:\n",a,'\n')
b=a[0:3]
print("b:\n",b,'\n')
#改版了,不能搜不存在的东西
c=a[['A','B','D']]
print("c:\n",c,'\n')
#判断搜索
d=a[a>1]
print("d:\n",d,'\n')
e=a[[1,2,4]]
print("e:\n",e,'\n')
它甚至还有 .value() 和 .keys() 这种字典的方法
a=pd.Series(np.arange(5), index=list(string.ascii_uppercase[:5]))
print("a:\n",a,'\n')
print(a.values)
print(a.keys)
2.DataFrame
·概貌
这就是一个矩阵,如果单列着来看的话就是一个Series,多行来看的话是有相同标签的Series的横向叠加
二维列表可以
也可以通过二维的字典来构造
a=pd.DataFrame(np.arange(15).reshape(5,3), index=list('abcde'),columns=list('XYZ'))
print("a:\n",a,'\n')
print("a:\n",a,'\n')
A=[
{'A':0,'B':3,'C':6,'D':9,'E':12},
{'A':1,'B':4,'C':7,'D':10,'E':13},
{'A':2,'B':5,'C':8,'D':11,'E':14}
]
A=pd.DataFrame(A)
print(A)
也可以通过二维的字典来构造
·基本属性和方法
下面是默认df为DataFrame的对象
注意属性是直接调出来的,没括号
a=pd.DataFrame(np.arange(15).reshape(5,3), index=list(string.ascii_uppercase[:5]))
print("a:\n",a,'\n')
print("a.shape:",a.shape)
print("a.dtypes:",a.dtypes)
print("a.ndim:",a.ndim)
print("a.index:",a.index)
print("a.columns:",a.columns)
print("a.values:",a.values)
print("-"*50)
print(a.describe())
print(a.info())
print(a.head(2))
print(a.tail(2))
·索引与排序
位置就是坐标
但是韩式保留了[ [行],[列]] 这般的指定,里面填标签或坐标
·排序:df.sort_values(by="要排序的行或列’’,ascending=True(小到大)/False(大到小),…)
a=pd.DataFrame(np.arange(15).reshape(5,3), index=list('abcde'),columns=list('XYZ'))
print("a:\n",a,'\n')
b=a.sort_values(by='Y',ascending=False)
print('''a.sort_values(by='Y',ascending=False):''','\n',b,'\n')
·索引:多行多列,不连续行\列,特定位置(一次直奔不过一个)
下面以loc为例子,其实iloc也差不多,就是标签改数字罢了
a=pd.DataFrame(np.arange(15).reshape(5,3), index=list('abcde'),columns=list('XYZ'))
print("a:\n",a,'\n')
print('a.X:','\n',a.loc[:]['X'],'\n')
print('a.b:','\n',a.loc['b'],'\n')
print('''a.loc['b',['X','Y']]:''','\n',a.loc['b',['X','Y']],'\n')
#a.loc['b'],['X','Y']这样也是可以的
#但祝生意是两重方括号,失去外面一重的后果是选完所有列
print('''a.loc[['b'],['X','Y']]''','\n',a.loc[['b'],['X','Y']],'\n')
#如果是[],[]这种的话,与numpy那边也不大同,这是指定一个范围
#比如 [3,5],[1,4],返回地四行的第二个和第五个,第五行第二个和第五个
print('''a.loc[['b','d'],['X','Y','Z']]:''','\n',)
print(a.loc[['b','d'],['X','Y','Z']],'\n')
#指定位置,只能一个个来
print('''a.loc['a','Z']:''','\n',a.loc['a','Z'])
·条件搜索
和numpy的相似
df[判断条件(含df)]
a=pd.DataFrame(np.arange(15).reshape(5,3), index=list('abcde'),columns=list('XYZ'))
print("a:\n",a,'\n')
print(a[a>10])