dataframe删除多列(Dataframe删除列)
"""pandas数据结构 DataFrame的基本应用练习示例"""
import pandas as pd
import numpy
'''
DataFrame是一个表格行的数据结构,
即有行标签(index),又有列标签(columns),
它也被称为异构数据表
所谓异构,指的是表格中每列的数据类型可以不同。
比如:可以是字符串,整形或浮点型等。
DataFrame 的每一行数据都可以看成一个Series结构,
只不过,DataFrame为这些行中每个数据值增加了一个列标签。
DataFrame其实是从Series的基础商演变而来的。
DataFrame结构类似于Excel的表格类型
DataFrame数据结构的特点:
DataFrame每一列的标签值允许使用不同的数据类型;
DataFrame是表格行的数据结构,具有行和列
DataFrame中的每个数据值都可以被修改
DataFrame结构的行数。列数允许增加或者删除。
DataFrame有两个方向的标签轴,分别是行标签和列标签
DataFrame可以对行和列执行算数运算
'''
# *******************************************
# 创建DataFrame对象 语法参数说明:
# DataFrame(data,index,columns,dtype,copy)
# data: 数据,输入的数据可以是ndarry ,series list dict 标量 DataFrame
# index: 行标签,如果没有传递index值,则默认行标签是np.arange(n),n代表data的元素个数
# dtype: 数据类型
# copy: 默认为false 表示复制数据data
# 创建一个空的DataFrame对象,
df = pd.DataFrame()
print(df)
# 使用单一列表创建DataFrame
# *************************************************
data = [1,2,3,4,5]
df = pd.DataFrame(data=data)
print("使用单一列表创建DataFrame")
print(df)
# 使用嵌套列表创建DataFrame
# *********************
data=[['张飞', '右将军'],
['赵云', '镇军将军'],
['关羽', '前将军'],
['黄忠', '后将军'],
['马超', '左将军']]
df = pd.DataFrame(data=data,columns=['姓名', '职称'])
print("使用嵌套列表创建DataFrame:")
print(df)
# *************************************************
# 字典嵌套列表创建DataFrame,使用dice字典是{}大括号
data ={'姓名':['张飞','赵云', '关羽', '黄忠', '马超'],
'职称':['右将军','镇军将军', '前将军', '后将军', '左将军']}
df = pd.DataFrame(data=data)
print("使用字典嵌套列表创建DataFrame:")
print(df)
# *************************************************
# 使用列表嵌套字典创建DataFrame。
# 对于字典元素缺失的,就是字典的Key无法找到对应的value值,将使用NaN代替
data = [{"姓名":"张飞","职称":"右将军", "封号":"新亭侯"},
{"姓名":"赵云","职称":"镇军将军"},
{"姓名":"关羽","职称":"前将军","封号":"汉寿亭侯"},
{"姓名":"黄忠","职称":"后将军", "封号":"关内侯"},
{"姓名":"马超","职称":"左将军"},]
df = pd.DataFrame(data=data)
print("使用列表嵌套字典创建DataFrame,缺失值使用NaN代替:")
print(df)
# *************************************************
# Series创建DataFrame 字典嵌套Series
data={"one":pd.Series(['z','x','c']),
"two":pd.Series(['a','s','d'])}
df = pd.DataFrame(data=data)
print("字典嵌套Series创建DataFrame:")
print(df)
print("使用列索引访问数据:")
print(df['two'].values)
print("访问前两行数据:")
print(df.head(2))
# 使用loc按照行名,列名 访问数据
print("访问第一行,列名为:two的数据")
print(df.loc[1,"two"])
# iloc 只接受整数索引,
print("访问第一行数据")
print(df.iloc[1])
# 使用columns列索引表标签可以实现添加新的数据列
data["three"] = pd.Series(['q', 'w', 'e']) # 添加新的列
df = pd.DataFrame(data=data) # 重新创建DataFreame
print("插入新列:")
print(df)
# 使用del 删除DataFrame 部分数据
del df["two"]
print("使用del删除DataFrame 部分数据")
print(df)
# 使用pop方法删除DataFrame中的数据
df.pop("one")
print("使用pop方法删除DataFrame中的数据:")
print(df)
# *************************************************
data={"one":pd.Series(['z','x','c']),
"two":pd.Series(['a','s','d'])}
df = pd.DataFrame(data=data)
# drop方法 删除指定行数据
d = df.drop(index=1)
print("drop方法 指定删除第一行数据:")
print(d)
# ****************************************************
# 在末尾出添加行 append
df1 = pd.DataFrame(data={"one":pd.Series(['z','x','c']),
"two":pd.Series(['a','s','d'])})
df2 = pd.DataFrame(data={"one":pd.Series(['1','2','3']),
"two":pd.Series(['4','5','6'])})
# append方法 ignore_index参数 为True时,重新排列行索引
df1 = df1.append(df2,ignore_index=True)
print("append在末尾添加新数据:")
print(df1)
# ****************************************************
'''
常用属性和方法:与Series相差无几
T 行和列转置
axes 返回一个以行轴和列轴标签为成员的列表
dtypes 返回没每列数据的数据类型
empty DataFrame中没有数据或者任意坐标轴的长度为0,则返回True
ndim 轴的数量,也指数组的维数
shape 返回一个元组。表示了DataFrame维度
size DataFrame中的元素数量
values 以numpy数组表示DataFrame中的元素值
head() 返回前n行数据
tail() 返回后n行数据
shift() 将行或列一定指定的步幅长度
'''
data = [{"姓名":"张飞","职称":"右将军", "封号":"新亭侯", "年龄": 25},
{"姓名":"赵云","职称":"镇军将军", "年龄": 22},
{"姓名":"关羽","职称":"前将军","封号":"汉寿亭侯", "年龄": 28},
{"姓名":"黄忠","职称":"后将军", "封号":"关内侯", "年龄": 45},
{"姓名":"马超","职称":"左将军" , "年龄": 30} ]
df = pd.DataFrame(data=data)
# T 行列转换
print("行列转换:")
print(df.T)
print("输出行标签,列标签:")
print(df.axes)
print("每一列的数据类型:")
print(df.dtypes)
print("是否为空值,是空值时返回True,否则返回False:")
print(df.empty)
print("DataFrame对象的维数:")
print(df.ndim)
print("DataFrame维度的元组:返回值元组,第一个为行,第二个为列")
print(df.shape)
print("DataFrame元素数量:")
print(df.size)
print("以ndarry数组的形式返回DataFrame中的数据:")
print(df.values)
# 移动DataFrame中的数据
# 参数periods移动的幅度,int数据
# 参数axis 控制移动行或者移动列 'index'上下移动,'columns'左右移动
# 参数fill_value 用于填充移动后缺失的数据
df = df.shift(periods=1, axis='index', fill_value="无")
print("向下移动一行DataFrame中的数据,数据用无填充:")
print(df)
代码运行结果:
Empty DataFrame
Columns: []
Index: []
使用单一列表创建DataFrame
0
0 1
1 2
2 3
3 4
4 5
使用嵌套列表创建DataFrame:
姓名 职称
0 张飞 右将军
1 赵云 镇军将军
2 关羽 前将军
3 黄忠 后将军
4 马超 左将军
使用字典嵌套列表创建DataFrame:
姓名 职称
0 张飞 右将军
1 赵云 镇军将军
2 关羽 前将军
3 黄忠 后将军
4 马超 左将军
使用列表嵌套字典创建DataFrame,缺失值使用NaN代替:
姓名 职称 封号
0 张飞 右将军 新亭侯
1 赵云 镇军将军 NaN
2 关羽 前将军 汉寿亭侯
3 黄忠 后将军 关内侯
4 马超 左将军 NaN
字典嵌套Series创建DataFrame:
one two
0 z a
1 x s
2 c d
使用列索引访问数据:
['a' 's' 'd']
访问前两行数据:
one two
0 z a
1 x s
访问第一行,列名为:two的数据
s
访问第一行数据
one x
two s
Name: 1, dtype: object
插入新列:
one two three
0 z a q
1 x s w
2 c d e
使用del删除DataFrame 部分数据
one three
0 z q
1 x w
2 c e
使用pop方法删除DataFrame中的数据:
three
0 q
1 w
2 e
drop方法 指定删除第一行数据:
one two
0 z a
2 c d
append在末尾添加新数据:
one two
0 z a
1 x s
2 c d
3 1 4
4 2 5
5 3 6
行列转换:
0 1 2 3 4
姓名 张飞 赵云 关羽 黄忠 马超
职称 右将军 镇军将军 前将军 后将军 左将军
封号 新亭侯 NaN 汉寿亭侯 关内侯 NaN
年龄 25 22 28 45 30
输出行标签,列标签:
[RangeIndex(start=0, stop=5, step=1), Index(['姓名', '职称', '封号', '年龄'], dtype='object')]
每一列的数据类型:
姓名 object
职称 object
封号 object
年龄 int64
dtype: object
是否为空值,是空值时返回True,否则返回False:
False
DataFrame对象的维数:
2
DataFrame维度的元组:返回值元组,第一个为行,第二个为列
(5, 4)
DataFrame元素数量:
20
以ndarry数组的形式返回DataFrame中的数据:
[['张飞' '右将军' '新亭侯' 25]
['赵云' '镇军将军' nan 22]
['关羽' '前将军' '汉寿亭侯' 28]
['黄忠' '后将军' '关内侯' 45]
['马超' '左将军' nan 30]]
向下移动一行DataFrame中的数据,数据用无填充:
姓名 职称 封号 年龄
0 无 无 无 无
1 张飞 右将军 新亭侯 25
2 赵云 镇军将军 NaN 22
3 关羽 前将军 汉寿亭侯 28
4 黄忠 后将军 关内侯 45