Python3:Pandas的简单使用2(针对DataFrame的操作:索引,修改和排序)

1.声明

下面的内容主要针对与当前的DataFrame进行的操作,涉及到对DataFrame的索引操作,赋值,修改还有排序等操作,主要用于本人复习

2.DataFrame的索引和修改操作

1.由于前面在创建DataFrame的时候,产生的数据是具有行列索引的,所以可对当前的index和columns进行相应的操作,这些操作可能涉及到其他操作

# 对当前的DataFrame进行索引的操作
import numpy as np
import pandas as pd

df = pd.DataFrame({
    "1th": [10, 11, 12, 13, 14],
    "2th": [20, 21, 22, 23, 24],
    "3th": [30, 31, 32, 33, 34],
    "4th": [40, 41, 42, 43, 44],
    "5th": [50, 51, 52, 53, 54],
})
print("输出当前的数据:\n{}".format(df))
# 重置当前的索引,使用当前的reset_index返回的是当前数据重置索引的副本
print("输出当前重置索引的数据:\n{}".format(df.reset_index()))

print("输出设置了索引后的数据:\n{}".format(df.set_index("1th", drop=False))) # 发现当前的1th这一行的数据变成当前的索引列
print("输出设置了索引后的数据:\n{}".format(df.set_index("1th", drop=True)))
print("输出当前的数据:\n{}".format(df))

# 为当前的数据添加多个索引
pd_array = df.set_index(["1th","2th"])
# 发现当前的索引变成多索引了:MultiIndex类型的数据,并且具有名称names
print(pd_array.index)

# MultiIndex 
print("输出当前的MultiIndex中的name属性:\n{}".format(pd_array.index.names))
print("输出当前的MultiIndex中的levels属性:\n{}".format(pd_array.index.levels))

结果:

输出当前的数据:
1th 2th 3th 4th 5th
0 10 20 30 40 50
1 11 21 31 41 51
2 12 22 32 42 52
3 13 23 33 43 53
4 14 24 34 44 54
输出当前重置索引的数据:
index 1th 2th 3th 4th 5th
0 0 10 20 30 40 50
1 1 11 21 31 41 51
2 2 12 22 32 42 52
3 3 13 23 33 43 53
4 4 14 24 34 44 54
输出设置了索引后的数据:
1th 2th 3th 4th 5th
1th
10 10 20 30 40 50
11 11 21 31 41 51
12 12 22 32 42 52
13 13 23 33 43 53
14 14 24 34 44 54
输出设置了索引后的数据:
2th 3th 4th 5th
1th
10 20 30 40 50
11 21 31 41 51
12 22 32 42 52
13 23 33 43 53
14 24 34 44 54
输出当前的数据:
1th 2th 3th 4th 5th
0 10 20 30 40 50
1 11 21 31 41 51
2 12 22 32 42 52
3 13 23 33 43 53
4 14 24 34 44 54
MultiIndex([(10, 20),
(11, 21),
(12, 22),
(13, 23),
(14, 24)],
names=[‘1th’, ‘2th’])
输出当前的MultiIndex中的name属性:
[‘1th’, ‘2th’]
输出当前的MultiIndex中的levels属性:
[[10, 11, 12, 13, 14], [20, 21, 22, 23, 24]]

1.我们可以使用reset_index()方式让前面设置的索引失效

2.可以使用set_index()指定哪个作为索引,drop是否为True或者False表示是否保留之前的索引

3.当我们设置了set_index多个索引的时候,就相当于从多个维度去检索数据,相当于Panel了

4.可以通过pd.index.XXX方式获取和索引(行)相关的数据信息

3.DataFrame的排序和赋值操作

# 赋值操作和排序操作
import numpy as np
import pandas as pd

np_array = np.random.randint(1, 10, (5, 5))
pd_array = pd.DataFrame(np_array, index=["行{}".format(i) for i in range(5)],
                        columns=["列{}".format(i) for i in range(5)])
print("当前生成的数据为:\n{}".format(pd_array))

# 改变当前列1中的所有数据并设置为1
pd_array["列1"] = 1
print("输出修改后的数据:\n{}".format(pd_array))

# 改变列2的数据为1,2,3,4,5
pd_array["列3"] = [1, 2, 3, 4, 5]
print("输出修改后的数据:\n{}".format(pd_array))

# 修改行0中的所有的数据为 0
pd_array[:1] = 0
print("输出修改后的数据:\n{}".format(pd_array))

# 使用loc的方式修改行1中的所有数据为 1,2,3,4,5
pd_array.loc["行1"] = [1, 2, 3, 4, 5]
print("使用loc的方式修改行1中的所有数据为:\n{}".format(pd_array))

# 开始使用当前的额排序操作
print("开始排序===================")
# 通过当前的index的方式排序 axis = 0表示rows,axis = 1表示columns
print("输出当前的按照降序排列的数据,按照rows方式:\n{}".format(pd_array.sort_index(axis=0, ascending=False)))
print("输出当前的按照降序排列的数据,按照columns方式:\n{}".format(pd_array.sort_index(axis=1, ascending=False)))
# 当前的数据是按照行或者列的名称的方式降序排列

# 通过当前的values的方式排序
print("按照当前的里面的值的方式开始排序")
print(pd_array.sort_values(by=["列0"]))
# 通过指定当前的by的方式按照指定的方式排序,这个排序是按照当前的data中的数据的大小来排列的,默认当前的ascending=True
print(pd_array.sort_values(by=["列0"], ascending=False))
# 发现当前的行的index的名称发生了变化
# print(pd_array.sort_values(by=["行0"], ascending=False)) 注意使用sort_values的时候不能按照当前的行index中的值进行排序,报错了

# 按照多个by方式排序
print("通过多个by方式进行排序:")
print(pd_array.sort_values(by=["列0", "列2"]))

结果:

当前生成的数据为:
列0 列1 列2 列3 列4
行0 1 6 3 1 5
行1 5 5 5 2 1
行2 1 3 3 6 5
行3 4 8 6 2 7
行4 8 6 2 2 3
输出修改后的数据:
列0 列1 列2 列3 列4
行0 1 1 3 1 5
行1 5 1 5 2 1
行2 1 1 3 6 5
行3 4 1 6 2 7
行4 8 1 2 2 3
输出修改后的数据:
列0 列1 列2 列3 列4
行0 1 1 3 1 5
行1 5 1 5 2 1
行2 1 1 3 3 5
行3 4 1 6 4 7
行4 8 1 2 5 3
输出修改后的数据:
列0 列1 列2 列3 列4
行0 0 0 0 0 0
行1 5 1 5 2 1
行2 1 1 3 3 5
行3 4 1 6 4 7
行4 8 1 2 5 3
使用loc的方式修改行1中的所有数据为:
列0 列1 列2 列3 列4
行0 0 0 0 0 0
行1 1 2 3 4 5
行2 1 1 3 3 5
行3 4 1 6 4 7
行4 8 1 2 5 3
开始排序===================
输出当前的按照降序排列的数据,按照rows方式:
列0 列1 列2 列3 列4
行4 8 1 2 5 3
行3 4 1 6 4 7
行2 1 1 3 3 5
行1 1 2 3 4 5
行0 0 0 0 0 0
输出当前的按照降序排列的数据,按照columns方式:
列4 列3 列2 列1 列0
行0 0 0 0 0 0
行1 5 4 3 2 1
行2 5 3 3 1 1
行3 7 4 6 1 4
行4 3 5 2 1 8
按照当前的里面的值的方式开始排序
列0 列1 列2 列3 列4
行0 0 0 0 0 0
行1 1 2 3 4 5
行2 1 1 3 3 5
行3 4 1 6 4 7
行4 8 1 2 5 3
列0 列1 列2 列3 列4
行4 8 1 2 5 3
行3 4 1 6 4 7
行1 1 2 3 4 5
行2 1 1 3 3 5
行0 0 0 0 0 0
通过多个by方式进行排序:
列0 列1 列2 列3 列4
行0 0 0 0 0 0
行1 1 2 3 4 5
行2 1 1 3 3 5
行3 4 1 6 4 7
行4 8 1 2 5 3

总结:

扫描二维码关注公众号,回复: 8723901 查看本文章

1.我们通过切片方式设置数据,但是这个数据只能修改当前的columns中名称相同的数据,不能修改index名称的数据,可以使用切片索引方式修改数据【:1】,但是在混合使用的时候必须这样:pd[列名称][列索引]

2.可以使用loc方式获取数据,只能使用loc[行名称]方式获取数据不能使用列名称获取数据,混合使用的时候必须这样:pd[行名称][列名称]

3.在排序的时候可以按照索引方式排序还可以使用值方式排序

  1. 使用索引方式为:pd.set_index(),需要指定axis和ascending,其中axis = 0表示rows,axis = 1表示columns,ascending为True表示按照当升序排列,False表示按照降序排列
  2. 使用值方式为:pd.set_values(),需要指定by和ascending,这里的ascending的使用方式和上面的索引方式一致,by为指定的列索引的名称,这个值可以是多个
  3. 注意使用值方式排序的时候by不能是行索引的名称,写了会报错的

4.总结

1.使用DataFrame的操作的时候需要主意是使用索引还是名称方式

2.使用不同的方式实现操作的时候需要注意顺序问题

3.在排序的时候set_values只能排序当前的列名称,使用set_index的时候两个都可以使用

以上纯属个人见解,如有问题请联系本人!

发布了215 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/103833260
今日推荐