pandas中有两个常用的类:
Pandas Series 类似表格中的一个列(column),类似一维数组,由下面两个部分组成:
import pandas as pd
import numpy as np
data=[1,2,3,4]
#使用列表创建
s1=Series(data)
s2=Series(data=[1,2,3,'four'])
#自定义索引(显示索引可以增强series的可读性)
s3=Series(data=[1,2,3,'four'],index=['a','b','c','d'])
#使用np数组创建
s4=Series(np.random.randint(0,100,size=(3,)))
from pandas import Series
#使用字典创建
dic={
'语文':90,
'数学':100,
'英语':88
}
s=Series(data=dic)
print(s)
#可直接通过索引读取内容
print(s.语文)
#Series的切片操作和numpy数组的一致
print(s[0:2])
s1=Series(data=[1,2,3],index=['a','b','c'])
s2=Series(data=[1,2,3],index=['a','d','c'])
s=s1+s2
DataFrame是一个表格型的数据结构。可以理解为将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
Dataframe 有三种常用的创建方式:由数组/list组成的字典;由Series组成的字典;由二维数组直接创建
#DataFrame的参数
DataFrame(
data=None,
index: Union[Collection, NoneType] = None,
columns: Union[Collection, NoneType] = None,
dtype: Union[str, numpy.dtype, ForwardRef('ExtensionDtype'), NoneType] = None,
copy: bool = False,
)
数组/List的维度要一致
dic={
'name':['xiaoli','wangwu','lisi'],
'salary':[100,234,678]
}
df3=DataFrame(data=dic)
维度不一致可用Nan补齐
#使用Series数组创建
s1=pd.Series(data=[1,2,3,4],index=list('abcd'))
s2=pd.Series(data=[1,2,3],index=list('abc'))
dic={
's1':s1,
's2':s2
}
df=pd.DataFrame(dic)
from pandas import DataFrame
#使用二维数组创建
df1=DataFrame(data=[[1,2,3],[4,5,6]],index=['first','second'],columns=['a','b','c'])
df2=DataFrame(data=np.random.randint(0,100,size=(3,4)))
loc:通过显式索引取行
iloc:通过隐式索引取行
import numpy as np
from pandas import DataFrame
dic={
'a':[100,90,102,80],
'b':[90,80,70,98],
'c':[60,88,89,100],
'd':[20,70,60,90]
}
df=DataFrame(data=dic,index=['一','二','三','四'])
注意:取单行和取单列的区别,有显式索引的时候,取单列必须要用显式索引
df['a'] #取单列
df[['a','c']]#取多列
#显式取
df.loc['一'] #取单行
df.loc[['一','四'],['a','c']] #显式取多行多列
df.loc['一','a'] #显式取元素
#隐式取
df.iloc[0] #取单行
df.iloc[[0,2]] #取多行
df.iloc[[0,2],[0,1]]#显式取多行多列
df['一':'三'] #显式切行
df.loc[:,'a':'b']#显式切列
df.loc['一':'三','a':'b'] #显式切行列
df[0:3] #隐式切行
df.iloc[:,0:3] #隐式切列
df.iloc[0:2,0:3] #隐式切行列
同Series的算术运算(相同位置的数进行运算)
from pandas import DataFrame
dic={
'time':['2022-08-11','2022-09-12','2022-10-13'], #time为字符串类型
'temp':[38,30,20]
}
df=DataFrame(data=dic)
#将time的字符串类型转化成时间序列类型
import pandas as pd
df['time']=pd.to_datetime(df['time']) #time为时间序列类型
#将time列作为原始数据的行索引
df.set_index('time',inplace=True)