上一期介绍了部分Pandas统计基本功能的内容,那么本期将继续对剩余的统计基本功能内容进行介绍,其中包括pandas排序、合并与连接、pandas迭代及pandas字符串和文本数据操作。
1 pandas排序
Pandas有两种排序方式,分别是:
按标签
按实际值
下面我们先生成一些案例数据
# 生成样例数据
#该df中,标签和值未排序
df1=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns=['col2','col1'])
1.1 按标签排序
使用sort_index()方法,通过传递axis参数和排序顺序,可以对DataFrame进行排序。
sorted_df0 = df1.sort_index() # 默认情况下,按照升序对行标签进行排序
sorted_df1 = df1.sort_index(ascending=False) # 降序排序
print(sorted_df0)
print(sorted_df1)
输出结果:
#sorted_df0
col2 col1
0 1.944841 -0.140687
1 -0.702086 1.165355
2 0.951864 0.147956
3 -0.299716 -0.317387
4 0.002298 -0.329066
5 0.286862 -0.591395
6 -0.920285 -0.637322
7 0.631418 -0.224196
8 -1.217174 0.622308
9 -0.091426 1.068749
#sorted_df1
col2 col1
9 -0.091426 1.068749
8 -1.217174 0.622308
7 0.631418 -0.224196
6 -0.920285 -0.637322
5 0.286862 -0.591395
4 0.002298 -0.329066
3 -0.299716 -0.317387
2 0.951864 0.147956
1 -0.702086 1.165355
0 1.944841 -0.140687
1.2 按列排序
通过传递axis的参数值为0或1,可以对列标签进行排序。
sorted_df3 = df1.sort_index(axis = 1) # 根据列标签排序
print(sorted_df3)
输出结果:
#sorted_df3
col1 col2
1 1.165355 -0.702086
4 -0.329066 0.002298
6 -0.637322 -0.920285
2 0.147956 0.951864
3 -0.317387 -0.299716
5 -0.591395 0.286862
9 1.068749 -0.091426
8 0.622308 -1.217174
0 -0.140687 1.944841
7 -0.224196 0.631418
1.3 按值排序
sort_values()是按值排序的方法。
unsorted_df = pd.DataFrame({
'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df0 = unsorted_df.sort_values(by='col1') # 根据列col1的值来排序
sorted_df1 = unsorted_df.sort_values(by=['col1','col2']) #根据多列的值大小来排序 ,当col1列的值相同时,再考虑col2列的值大小
print(sorted_df0)
print(sorted_df1)
输出结果:
#sorted_df0
col1 col2
1 1 3
2 1 2
3 1 4
0 2 1
#sorted_df1
col1 col2
2 1 2
1 1 3
3 1 4
0 2 1
此外,sort_values()提供了不同的排序算法,如mergesort,heapsort和quicksort。其中Mergesort是唯一稳定的算法
sorted_df2 = unsorted_df.sort_values(by='col1',kind='mergesort')
print(sorted_df2)
输出结果:
#sorted_df2
col1 col2
1 1 3
2 1 2
3 1 4
0 2 1
2 Pandas合并/连接
Pandas中的连接操作,与SQL等关系数据库非常相似。
2.1 merge函数
pd.merge(left, right, how='inner', on=None, lefton=None, righton=None,leftindex=False, rightindex=False, sort=True)
left: 一个DataFrame对象
right: 另一个DataFrame对象
on: 用于连接的列名,必须在左和右DataFrame对象中存在的列
left_on: 左侧DataFrame用作连接的键
right_on: 右边的DataFrame用作连接的键
left_index: 如果为True,则使用左侧DataFrame中的索引(行标签)作为其连接键。