1.DataFrame常用属性、函数以及索引方式
1.1DataFrame简介
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。DataFrame可以通过类似字典的方式或者.columnname的方式将列获取为一个Series。行也可以通过位置或名称的方式进行获取。
为不存在的列赋值会创建新列。
>>> del frame['xxx'] # 删除列
1.2DataFrame常用属性
属性说明valuesDataFrame的值index行索引index.name行索引的名字columns列索引columns.name列索引的名字ix返回行的DataFrameix[[x,y,...], [x,y,...]]对行重新索引,然后对列重新索引Tframe行列转置
1.3DataFrame常用函数
1.3.1函数
说明DataFrame(dict, columns=dict.index, index=[dict.columnnum])
DataFrame(二维ndarray)
DataFrame(由数组、列表或元组组成的字典)
DataFrame(NumPy的结构化/记录数组)
DataFrame(由Series组成的字典)
DataFrame(由字典组成的字典)
DataFrame(字典或Series的列表)
DataFrame(由列表或元组组成的列表)
DataFrame(DataFrame)
DataFrame(NumPy的MaskedArray)
构建DataFrame
数据矩阵,还可以传入行标和列标
每个序列会变成DataFrame的一列。所有序列的长度必须相同
类似于“由数组组成的字典”
每个Series会成为一列。如果没有显式制定索引,则各Series的索引会被合并成结果的行索引
各内层字典会成为一列。键会被合并成结果的行索引。
各项将会成为DataFrame的一行。索引的并集会成为DataFrame的列标。
类似于二维ndarray
沿用DataFrame
类似于二维ndarray,但掩码结果会变成NA/缺失值
df.reindex([x,y,...], fill_value=NaN, limit)
df.reindex([x,y,...], method=NaN)
df.reindex([x,y,...], columns=[x,y,...],copy=True)
返回一个适应新索引的新对象,将缺失值填充为fill_value,最大填充量为limit
返回适应新索引的新对象,填充方式为method
同时对行和列进行重新索引,默认复制新对象。
df.drop(index, axis=0)丢弃指定轴上的指定项。 1.3.2排序函数
说明df.sort_index(axis=0, ascending=True)
df.sort_index(by=[a,b,...])
根据索引排序 1.3.3汇总统计函数
说明df.count()非NaN的数量df.describe()一次性产生多个汇总统计df.min()
df.min()
最小值
最大值
df.idxmax(axis=0, skipna=True)
df.idxmin(axis=0, skipna=True)
返回含有最大值的index的Series
返回含有最小值的index的Series
df.quantile(axis=0)计算样本的分位数df.sum(axis=0, skipna=True, level=NaN)
df.mean(axis=0, skipna=True, level=NaN)
df.median(axis=0, skipna=True, level=NaN)
df.mad(axis=0, skipna=True, level=NaN)
df.var(axis=0, skipna=True, level=NaN)
df.std(axis=0, skipna=True, level=NaN)
df.skew(axis=0, skipna=True, level=NaN)
df.kurt(axis=0, skipna=True, level=NaN)
df.cumsum(axis=0, skipna=True, level=NaN)
df.cummin(axis=0, skipna=True, level=NaN)
df.cummax(axis=0, skipna=True, level=NaN)
df.cumprod(axis=0, skipna=True, level=NaN)
df.diff(axis=0)
df.pct_change(axis=0)
返回一个含有求和小计的Series
返回一个含有平均值的Series
返回一个含有算术中位数的Series
返回一个根据平均值计算平均绝对离差的Series
返回一个方差的Series
返回一个标准差的Series
返回样本值的偏度(三阶距)
返回样本值的峰度(四阶距)
返回样本的累计和
返回样本的累计最大值
返回样本的累计最小值
返回样本的累计积
返回样本的一阶差分
返回样本的百分比数变化
1.3.4计算函数
说明 df.add(df2, fill_value=NaN, axist=1)
df.sub(df2, fill_value=NaN, axist=1)
df.div(df2, fill_value=NaN, axist=1)
df.mul(df2, fill_value=NaN, axist=1)
元素级相加,对齐时找不到元素默认用fill_value
元素级相减,对齐时找不到元素默认用fill_value
元素级相除,对齐时找不到元素默认用fill_value
元素级相乘,对齐时找不到元素默认用fill_value
df.apply(f, axis=0)将f函数应用到由各行各列所形成的一维数组上df.applymap(f)将f函数应用到各个元素上df.cumsum(axis=0, skipna=True)累加,返回累加后的dataframe
1.4DataFrame索引方式
索引方式说明df[val]选取DataFrame的单个列或一组列df.ix[val]选取Dataframe的单个行或一组行df.ix[:,val]选取单个列或列子集df.ix[val1,val2]将一个或多个轴匹配到新索引reindex方法将一个或多个轴匹配到新索引xs方法根据标签选取单行或者单列,返回一个Seriesicol、irow方法根据整数位置选取单列或单行,并返回一个Seriesget_value、set_value根据行标签和列标签选取单个值
运算:默认情况下,Dataframe和Series之间的算术运算会将Series的索引匹配到的Dataframe的列,沿着列一直向下传播。若索引找不到,则会重新索引产生并集。
2.DataFrame常用属性例程
"""
@author: 蔚蓝的天空Tom
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
DataFrame可以通过类似字典的方式或者.columnname的方式将列获取为一个Series。
行也可以通过位置或名称的方式进行获取。
DataFrame常用属性
属性 说明
values DataFrame的值
index 行索引
index.name 行索引的名字
columns 列索引
columns.name 列索引的名字
ix 返回行的DataFrame
ix[[x,y,...], [x,y,...]] 对行重新索引,然后对列重新索引
T frame行列转置
"""
import pandas
as pd
from pandas
import DataFrame
if __name__==
'__main__':
data = {
'Name':[
'Tom',
'Kim',
'Andy'],
'Age':[
18,
16,
19],
'Height':[
1.6,
1.5,
1.7]}
ind = [
'No.1',
'No.2',
'No.3']
df = pd.DataFrame(data, index=ind)
v = df.values
ind = df.index
iname = df.index.name
df.index.name =
'StudentID'
iname = df.index.name
col = df.columns
cname = df.columns.name
df.columns.name =
'StudentInfo'
cname = df.columns.name
ret = df.ix[
0]
ret = df.ix[
1]
ret = df.ix[
-1]
ret = df.ix[[
0,
2]]
ret = df.ix[[
0,
2], [
0,
1]]
print(
'转置前:\n', df)
print(
'转置前values:\n', df.values)
dfT = df.T
print(
'转置后:\n', dfT)
print(
'转置后values:\n', dfT.values)
print(
'转置前index.name:\n', df.index.name)
print(
'转置后index.name:\n', dfT.index.name)
print(
'转置前columns.name:\n', df.columns.name)
print(
'转置后columns.name:\n', dfT.columns.name)
3.DataFrame常用函数DataFrame()/reindex()/drop()
def DataFrame_manual():
'''
DataFrame类型类似于数据库表结构的数据结构,含有行索引和列索引
可以将DataFrame看成由相同索引的Series组成的Dict类型。
在其底层是通过二维以及一维的数据块实现
'''
import pandas
as pd
from pandas
import DataFrame
data = {
'Name':[
'Tom',
'Kim',
'Andy'],
'Age':[
18,
16,
19],
'Height':[
1.6,
1.5,
1.7]}
df = pd.DataFrame(data)
df = pd.DataFrame(data, columns=[
'Name',
'Age',
'Height'])
df = pd.DataFrame(data, index=[
'1st',
'2nd',
'3th'])
data = {
'Name': {
'1st':
'Tom',
'2nd':
'Kim',
'3th':
'Andy'},
'Age': {
'1st':
18,
'2nd':
16,
'3th':
19},
'Height':{
'1st':
1.6,
'2nd':
1.5,
'3th':
1.7}}
df = pd.DataFrame(data)
df = pd.DataFrame(data, [
'3th',
'2nd',
'1st'])
data = {
'Name':[
'Tom',
'Kim',
'Andy'],
'Age':[
18,
16,
19],
'Height':[
1.6,
1.5,
1.7]}
df = pd.DataFrame(data, columns=[
'Name',
'Age',
'Height'], index=[
'1st',
'2nd',
'3th'])
s = df[
'Name']
data = {
'Name':[
'Tom',
'Kim',
'Andy'],
'Age':[
18,
16,
19],
'Height':[
1.6,
1.5,
1.7]}
df = pd.DataFrame(data,
columns=[
'Name',
'Age',
'Height'],
index=[
'1st',
'2nd',
'3th'])
s = df.ix[
'1st']
s = df.ix[
0]
s = df.ix[[
'3th',
'2nd']]
s = df.ix[range(
3)]
ret = df[
'Name'][
'1st']
ret = df[
'Name'][
0]
ret = df[
'Age'][
'1st']
ret = df[
'Age'][
0]
ret = df[
'Height'][
'1st']
ret = df[
'Height'][
0]
ret = df.ix[
'1st'][
'Name']
ret = df.ix[
0][
'Name']
ret = df.ix[
'1st'][
'Age']
ret = df.ix[
0][
'Age']
ret = df.ix[
'1st'][
'Height']
ret = df.ix[
0][
'Height']
data = {
'Name':[
'Tom',
'Kim',
'Andy'],
'Age':[
18,
16,
19],
'Height':[
1.6,
1.5,
1.7]}
df = pd.DataFrame(data,
columns=[
'Name',
'Age',
'Height'],
index=[
'1st',
'2nd',
'3th'])
df[
'Grade'] =
9
df[
'Grade'] = [
6,
7,
7]
s = pd.Series([
False,
True,
True], index=[
'1st',
'2nd',
'3th'])
df[
'HighGrade'] = s
data = {
'Name':[
'Tom',
'Kim',
'Andy'],
'Age':[
18,
16,
19],
'Height':[
1.6,
1.5,
1.7]}
df = pd.DataFrame(data,
columns=[
'Name',
'Age',
'Height'],
index=[
'1st',
'2nd',
'3th'])
df.columns.name =
'Students'
df.index.name =
'ID'
4.DataFrame排序函数
def DataFrame_Sort():
data = {
'Name': {
'No.1':
'Tom',
'No.2':
'Kim',
'No.3':
'Andy'},
'Age': {
'No.1':
18,
'No.2':
16,
'No.3':
19},
'Height':{
'No.1':
1.6,
'No.2':
1.5,
'No.3':
1.7}}
df = pd.DataFrame(data)
df.index.name =
'ID'
df.columns.name =
'StudentInfo'
ret = df.sort_index(ascending=
True)
ret = df.sort_index(ascending=
False)
ret = df.sort_values(by=
'Age', ascending=
True)
ret = df.sort_values(by=
'Age', ascending=
False)
5.DataFrame汇总统计函数
"""
@author: 蔚蓝的天空Tom
Aim:DataFrame的汇总统计功能函数
df.count() 非NaN的数量
df.describe() 一次性产生多个汇总统计
df.min() 最小值
df.min() 最大值
df.idxmax(axis=0, skipna=True) 返回含有最大值的index的Series
df.idxmin(axis=0, skipna=True) 返回含有最小值的index的Series
df.quantile(axis=0) 计算样本的分位数
df.sum(axis=0, skipna=True, level=NaN) 返回一个含有求和小计的Series
df.mean(axis=0, skipna=True, level=NaN) 返回一个含有平均值的Series
df.median(axis=0, skipna=True, level=NaN) 返回一个含有算术中位数的Series
df.mad(axis=0, skipna=True, level=NaN) 返回一个根据平均值计算平均绝对离差的Series
df.var(axis=0, skipna=True, level=NaN) 返回一个方差的Series
df.std(axis=0, skipna=True, level=NaN) 返回一个标准差的Series
df.skew(axis=0, skipna=True, level=NaN) 返回样本值的偏度(三阶距)
df.kurt(axis=0, skipna=True, level=NaN) 返回样本值的峰度(四阶距)
df.cumsum(axis=0, skipna=True, level=NaN) 返回样本的累计和
df.cummin(axis=0, skipna=True, level=NaN) 返回样本的累计最大值
df.cummax(axis=0, skipna=True, level=NaN) 返回样本的累计最小值
df.cumprod(axis=0, skipna=True, level=NaN) 返回样本的累计积
df.diff(axis=0) 返回样本的一阶差分
df.pct_change(axis=0) 返回样本的百分比数变化
"""
import pandas
as pd
from pandas
import DataFrame
if __name__==
'__main__':
data = {
'Name':[
'Tom',
'Kim',
'Andy'],
'Age':[
18,
16,
19],
'Height':[
1.6,
1.5,
1.7]}
ind = [
'No.1',
'No.2',
'No.3']
df = pd.DataFrame(data, index=ind)
df.index.name =
'ID'
df.columns.name =
'StudentInfo'
cnt = df.count()
ret = df.describe()
ret = df.min()
ret = df.max()
data = {
'Age':[
18,
16,
19],
'Height':[
1.6,
1.5,
1.7],
'Math':[
60,
70,
100],
'English':[
98,
68,
69],
'Chinese':[
50,
99,
70]}
ind = [
'No.1',
'No.2',
'No.3']
df = pd.DataFrame(data, index=ind)
df.index.name =
'ID'
df.columns.name =
'Student'
ret = df.idxmax(axis =
0)
ret = df.idxmax(axis =
1)
ret = df.quantile(axis =
0)
ret = df.sum(axis=
0)
ret = df.sum(axis=
1)
ret = df.mean(axis=
0)
ret = df.mean(axis=
1)
ret = df.median(axis=
0)
ret = df.median(axis=
1)
ret = df.mad(axis=
0)
ret = df.mad(axis=
1)
ret = df.var(axis=
0)
ret = df.var(axis=
1)
ret = df.std(axis=
0)
ret = df.std(axis=
1)
ret = df.skew(axis=
0)
ret = df.skew(axis=
1)
ret = df.kurt(axis=
0)
ret = df.kurt(axis=
1)
ret = df.cumsum(axis=
0)
ret = df.cumsum(axis=
1)
ret = df.cummin(axis=
0)
ret = df.cummin(axis=
1)
ret = df.cummax(axis=
0)
ret = df.cummax(axis=
1)
ret = df.cumprod(axis=
0)
ret = df.cumprod(axis=
1)
ret = df.diff(axis=
0)
ret = df.diff(axis=
1)
ret =df.pct_change(axis=
0)
ret = df.pct_change(axis=
1)
6.DataFrame计算函数
"""
@author: 蔚蓝的天空Tom
Aim:实现DataFrame的计算函数的示例
df.add(df2, fill_value=NaN, axist=1) 元素级相加,对齐时找不到元素默认用fill_value
df.sub(df2, fill_value=NaN, axist=1) 元素级相减,对齐时找不到元素默认用fill_value
df.div(df2, fill_value=NaN, axist=1) 元素级相除,对齐时找不到元素默认用fill_value
df.mul(df2, fill_value=NaN, axist=1) 元素级相乘,对齐时找不到元素默认用fill_value
df.apply(f, axis=0) 将f函数应用到由各行各列所形成的一维数组上
df.applymap(f) 将f函数应用到各个元素上
df.cumsum(axis=0, skipna=True) 累加,返回累加后的dataframe
"""
import pandas
as pd
from pandas
import DataFrame
if __name__==
'__main__':
data = {
'Math':[
2,
4,
6],
'English':[
4,
8,
12]}
ind = [
'No.1',
'No.2',
'No.3']
df1 = pd.DataFrame(data, index=ind)
df1.index.name =
'ID'
df1.columns.name =
'Student'
data = {
'Math':[
1,
2,
3],
'English':[
2,
4,
6]}
ind = [
'No.1',
'No.2',
'No.3']
df2 = pd.DataFrame(data, index=ind)
df2.index.name =
'ID'
df2.columns.name =
'Student'
ret = df1.add(df2)
ret = df1.sub(df2)
ret = df1.div(df2)
ret = df1.mul(df2)
import numpy
as np
ret = df1.apply(np.square)
ret = df1.applymap(np.square)
ret = df1.cumsum(axis=
0)
ret = df1.cumsum(axis=
1)
7.DataFrame常用索引方式例程
"""
@author: 蔚蓝的天空Tom
Aim:完成DataFrame的索引方式的示例----df[], df.ix[], df.reindex(), df.xs(), df.icol()等
索引方式 说明
df[val] 选取DataFrame的单个列或一组列
df.ix[val] 选取Dataframe的单个行或一组行
df.ix[:,val] 选取单个列或列子集
df.ix[val1,val2] 将一个或多个轴匹配到新索引
reindex方法 将一个或多个轴匹配到新索引
xs方法 根据标签选取单行或者单列,返回一个Series
icol、irow方法 根据整数位置选取单列或单行,并返回一个Series
get_value、set_value 根据行标签和列标签选取单个值
"""
import pandas
as pd
from pandas
import DataFrame
if __name__==
'__main__':
data = {
'Name':[
'Tom',
'Kim',
'Andy'],
'Age':[
18,
16,
19],
'Math':[
95,
98,
96]}
ind = [
'No.1',
'No.2',
'No.3']
df = pd.DataFrame(data, index=ind, columns=[
'Name',
'Age',
'Math'])
df.index.name =
'ID'
df.columns.name =
'Student'
ret = df[[
0]]
ret = df[[
-1]]
ret = df[[
-1,
0]]
ret = df.ix[[
0]]
ret = df.ix[[
-1]]
ret = df.ix[[
-1,
0]]
ret = df.ix[
0:
2, [
0]]
ret = df.ix[:
-1, [
0]]
ret = df.ix[[
0], [
0]]
ret = df.ix[[
0], [
1]]
ret = df.ix[[
1], [
0]]
df.reindex()+df.xs()+df.iloc[] + df.get_value() + df.get_values() + df.set_value()
import pandas
as pd
from pandas
import DataFrame
if __name__==
'__main__':
data = {
'Name':[
'Tom',
'Kim',
'Andy'],
'Age':[
18,
16,
19],
'Height':[
1.7,
1.5,
1.6]}
ind = [
'No.1',
'No.2',
'No.3']
df = pd.DataFrame(data, index=ind, columns=[
'Name',
'Age',
'Height'])
df.index.name =
'ID'
df.columns.name =
'Student'
ret = df.reindex(index=[
'No.3',
'No.2',
'No.1'])
ret = df.reindex(index=[
'No.3',
'No.2',
'No.1'], columns=[
'Name',
'Age'])
ret = df.reindex(index=[
'No.1'], columns=[
'Name',
'Age'])
ret = df.reindex(index=[
'No.1'], columns=[
'Name'])
ret = df.xs(key=
'No.1', axis=
0)
ret = df.xs(key=
'Name', axis=
1)
ret = df.xs(key=
'Age', axis=
1)