DataFrame
DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
行索引:index
列索引:columns
值:values(numpy的二维数组)
1、DataFrame的创建
最常用的方法是传递一个字典来创建。DataFrame以字典的键作为每一【列】的名称,以字典的值(一个数组)作为每一列。
此外,DataFrame会自动加上每一行的索引(和Series一样)。
同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。
2、DataFrame的索引
1、 对列进行索引
1. 通过类似字典的方式
2. 通过属性的方式
可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。
df2.Python
df2["Python"] -- 这个方法比较常用(列表中可以传多个值,用逗号隔开)
3、DataFrame的运算
1、 DataFrame之间的运算
同Series一样:
在运算中自动对齐不同索引的数据
如果索引不对应,则补NaN
df1+df2 df1.add(df2, fill_value=0)
Html Java Python Ruby 数学 英语 语文 Html Java Python Ruby 数学 英语 语文
a NaN NaN 131 NaN NaN NaN NaN a 121.0 132.0 131 125.0 120.0 NaN 123.0
b NaN NaN 235 NaN NaN NaN NaN b 1.0 123.0 235 48.0 136.0 NaN 114.0
c NaN NaN 228 NaN NaN NaN NaN c 130.0 77.0 228 29.0 141.0 NaN 130.0
d NaN NaN 130 NaN NaN NaN NaN d 18.0 88.0 130 33.0 129.0 NaN 117.0
2、 Series与DataFrame之间的运算
使用Python操作符:以行为单位操作(参数必须是行),对所有行都有效。(类似于numpy中二维数组与一维数组的运算,但可能出现NaN)
使用pandas操作函数:
axis=0:以列为单位操作(参数必须是列),对所有列都有效。
axis=1:以行为单位操作(参数必须是行),对所有行都有效。
df2 ----> DataFrame对象
s_row = df2.loc["c"] ---- Series对象
s_column = df2["Python"] ---- Series对象
df2.add(s_row) ---- df2对象每一列与s_row相加
df2.add(s_column, axis="index") ---- df2对象每一行与s_column相加
丢失数据的处理
分为两种: None np.nan(NaN)
numpy中:
type(None) ---- NoneType
None是Python自带的,其类型为python object。因此,
np.nan(NaN)
numpy中:
np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN。
但可以使用np.nan*()函数来计算nan,此时视nan为0
nd = np.array([10,20,30,np.nan])
np.nansum(nd) ----> 60.0
pandas中None与np.nan操作
判断函数:
isnull():数据是否为空
notnull():数据是否不为空
pandas层次化索引
创建多层行索引
1、 隐式构造
最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组
Series也可以创建多层索引
s = Series(data = [1,2,3,"a"],
index = [["a","a","b","b"],["期中","期末","期中","期末"]])
DataFrame:
多层列索引
除了行索引index,列索引columns也能用同样的方法创建多层索引
df = DataFrame(data = np.random.randint(0,150,size = (1,8)),
columns = [['a',"a","a","a","b","b","b","b"],
['期中',"期中","期末","期末",'期中',"期中","期末","期末"],
["一单元","二单元","一单元","二单元","一单元","二单元","一单元","二单元"]],
index = ["Python"])
多层索引对象的索引与切片操作
1、 Series的操作
unstack():行索引变列索引
df4.unstack() ---- 把第二层的行索引变成列索引
df4.unstack(level=1) ---- 把第二层的行索引变成列索引
df1.unstack(level = 1) ---- 把df1的第二层行索引变为列索引
【注意】需要指定axis
【小技巧】和unstack()相反,聚合的时候,axis等于哪一个,哪一个就保留。
所谓的聚合操作:平均数,方差,最大值,最小值……
df4.div(10, axis = "index") ---- df4的数据除10
df4.sum(axis = 1) ---- 按行求和
df4.std() ---- df4的标准差
pandas的拼接操作
pandas的拼接分为两种:
级联:pd.concat, pd.append
合并:pd.merge, pd.join
使用pd.concat()级联