python之pandas --- DataFrame基础数据结构

1DataFrame的创建

DataFrame创建

  • pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)
    data:创建数组的数据,可为ndarray, dict
    index:行索引
    columns:列索引
    dtype:数组数据类型
    copy:是否拷贝
fn=pd.DataFrame(np.arange(16).reshape(4,4),index=list("abcd"),columns=list("xwyz"))
"""
    x	w	y	z
a	0	1	2	3
b	4	5	6	7
c	8	9	10	11
d	12	13	14	15
"""

2重置索引

  • 除了创建时可以指定,我们创建后还可以通过df.reindex()进行重置索引。
  • 重置索引不会改变数值,如果是原数组中没有的数值,则默认为NaN,当前列数据会自动转为浮点类型。
  • 索引创建
    df.reindex(index=None, columns=None, axis=None,fill_value=nan)
fn=pd.DataFrame(np.arange(16).reshape(4,4),index=list("abcd"),columns=list("xwyz"))
"""

    x	w	y	z
a	0	1	2	3
b	4	5	6	7
c	8	9	10	11
d	12	13	14	15
"""
fn.reindex(index=list("acde"),columns=list("wyzf"))
"""

     w	   y	  z	      f
a	1.0	  2.0	 3.0	NaN
c	9.0	  10.0   11.0   NaN
d	13.0  14.0   15.0   NaN
e	NaN	  NaN	 NaN	NaN
"""

3 DataFrame基础操作

功能 含义
df.shape 查看数组形状,返回值为元组
df.dtypes 查看列数据类型
df.ndim 数据维度,返回为整数
df.index 行索引
df.columns 列索引
df.values
d.head(n) 显示头部几行,默认前5行
d.tail(n) 显示末尾几行,默认后5行
d.info() 相关信息概述

4 DataFrame索引和切片

索引 描述
df[索引:索引]或df[“标签”:“标签”] 表示对行切片
df[“列标签”]或 df[[“列标签”,“列标签”]] 表示对列进行切片
df.loc[ : , : ] 通过标签选择数据,逗号前面是行,后面是列,
df.iloc[ : ,:] 通过位置索引选择数据,规则同列表,左开右闭
fn=pd.DataFrame(np.arange(16).reshape(4,4),index=list("abcd"),columns=list("xwyz"))
fn2=fn.reindex(index=list("acde"),columns=list("wyzf"))
"""
       w	   y	   z	f
a	  1.0	  2.0	 3.0	NaN
c	  9.0	  10.0	 11.0	NaN
d	  13.0	  14.0	 15.0	NaN
e	  NaN	  NaN	 NaN	NaN
"""
fn2["a":"d"]
#行切片,或者fn2[0:3]
"""
	   w	   y	   z	f
a	 1.0	  2.0	  3.0	NaN
c	 9.0	 10.0	 11.0	NaN
d	13.0	 14.0	 15.0	NaN
"""
fn2[["w","z"]]
#列切片,不能用索引切片,只能用标签切片
"""
	   w	z
a	  1.0	3.0
c	  9.0	11.0
d	  13.0	15.0
e	  NaN	NaN
"""

5 DataFrame数据修改

常用功能方法 代码 备注
修改列数据 df[“新的列标签”] = 值 新添加的值的长度必须与其它列的长度保持一致。
插入列 df.insert(loc, column, value) loc 为插入列的位置
column 为插入列的标签
value 为插入列的值
添加行 df.loc[“新的行标签”,:] = 值
df.append(df2)
有两种方法
删除数据 del df[“列标签”]
df.drop(axis=0,index=None,columns=None, inplace=False)
算术运算 +
-
*
/
//
**
DataFrame以及Series之间进行运算。但秉承的原则就是对应索引运算,存在索引不同时,返回结果为索引对的并集。但是实际操作会发现,当存在索引不同时,返回的值自动填充NaN。
函数应用于映射 df.apply(func, axis=0)
df.applymap(func)
通过 apply 将函数运用到列 或者 行
applymap将函数应用到每个数据上
排序 df.sort_index(axis=0,ascending=True)# 索引排序
df.sort_values(by)# 值排序
axis指定轴,默认为0轴。ascending为排序方式,默认为True表示升序
by指定一列或多列作为排序键,by = [col1,col2] 是先给col1排序 当col1有相同值时,col2中按排序顺序再排序
方法 描述
count 非NA值的个数
min,max 最小值,最大值
idxmin,idxmax 最小值,最大值的标签索引
sum 求和
mean 平均值
median 中位数
var 方差
std 标准差
cumsum 累计值
cummin,cummax 累计值的最小值或最大值
cumprod 值的累计积
diff 计算第一个算术差值(时间序列)
pct_change 百分比
corr 按索引对其的值的相关性
cov 协方差
import pandas as pd
import numpy as np
fn=pd.DataFrame(np.arange(16).reshape(4,4),index=list("abcd"),columns=list("wxyz"))
"""
	w	x	y	z
a	0	1	2	3
b	4	5	6	7
c	8	9	10	11
d	12	13	14	15
"""
fn["w"]=[16,17,18,19]
"""
	w	x	y	z
a	16	1	2	3
b	17	5	6	7
c	18	9	10	11
d	19	13	14	15
"""
fn.insert(1,'mun',np.ones(4))
## df.insert(loc, column, value)
##  loc 为插入列的位置
##  column 为插入列的标签
##  value 为插入列的值
""""
    w  mun   x   y   z
a  16  1.0   1   2   3
b  17  1.0   5   6   7
c  18  1.0   9  10  11
d  19  1.0  13  14  15
"""
fn.loc["e",:]=np.arange(5)
"""
	   w	mun	x	y	z
a	16.0	1.0	1.0	2.0	3.0
b	17.0	1.0	5.0	6.0	7.0
c	18.0	1.0	9.0	10.0	11.0
d	19.0	1.0	13.0	14.0	15.0
e	 0.0	1.0	2.0	3.0	4.0
"""
fn.append(fn)
"""

w	mun	x	y	z
a	16.0	1.0	1.0	2.0	3.0
b	17.0	1.0	5.0	6.0	7.0
c	18.0	1.0	9.0	10.0	11.0
d	19.0	1.0	13.0	14.0	15.0
e	0.0	1.0	2.0	3.0	4.0
a	16.0	1.0	1.0	2.0	3.0
b	17.0	1.0	5.0	6.0	7.0
c	18.0	1.0	9.0	10.0	11.0
d	19.0	1.0	13.0	14.0	15.0
e	0.0	1.0	2.0	3.0	4.0
"""
del fn["mun"]
"""
	w	x	y	z
a	16.0	1.0	2.0	3.0
b	17.0	5.0	6.0	7.0
c	18.0	9.0	10.0	11.0
d	19.0	13.0	14.0	15.0
e	0.0	2.0	3.0	4.0
"""
fn.drop(["x","z"],axis=1,inplace=True)
"""
	w	y
a	16.0	2.0
b	17.0	6.0
c	18.0	10.0
d	19.0	14.0
e	0.0	3.0
"""
fn.drop(index=["a"],inplace=True)
"""
	w	y
b	17.0	6.0
c	18.0	10.0
d	19.0	14.0
e	0.0	3.0
"""
fn.drop(columns=["y"],inplace=True)
"""
	w
b	17.0
c	18.0
d	19.0
e	0.0
"""
fn.append(fn)
fn1=fn.apply(lambda x : np.square(x) if x.name=='w' else x)
"""
w
b	289.0
c	324.0
d	361.0
e	0.0
"""
fn2=pd.DataFrame(np.arange(16).reshape(4,4),index=list("abcd"),columns=list("wxyz"))
"""
	w	x	y	z
a	0	1	2	3
b	4	5	6	7
c	8	9	10	11
d	12	13	14	15
"""
fn2.apply(lambda x :np.square(x) if x.name in ['x', 'y'] else x)
### 对 x 和 y 列进行平方运算
"""
	w	x	y	z
a	0	1	4	3
b	4	25	36	7
c	8	81	100	11
d	12	169	196	15
"""
def add_value(x):
    return x+1
fn2.applymap(add_value)
"""
    w	x	y	z
a	1	2	3	4
b	5	6	7	8
c	9	10	11	12
d	13	14	15	16
"""
fn2.sort_values(by="w",ascending=False)
"""
    w	x	y	z
d	12	13	14	15
c	8	9	10	11
b	4	5	6	7
a	0	1	2	3
"""
fn2.sort_index(axis=1,ascending=False)
"""

z	y	x	w
a	3	2	1	0
b	7	6	5	4
c	11	10	9	8
d	15	14	13	12
"""

你可能感兴趣的:(pandas,python)