pandas基础__之__对数据进行筛选和排序

使用Pandas对数据进行筛选和排序

在Pandas中通过.sort和.loc函数也可以实现这两 个功能。.sort函数可以实现对数据表的排序操作;.loc函数可以实现对数据表的筛选操作。

对值进行排序

pandas.DataFrame.sort_values

DataFrame. sort_values ( by,   axis=0,   ascending=True,   inplace=False,   kind='quicksort',   na_position='last' ) [source]

Sort by the values along either axis

New in version 0.17.0.

Parameters:

by : str or list of str

Name or list of names which refer to the axis items.

axis : {0 or ‘index’, 1 or ‘columns’}, default 0

Axis to direct sorting

ascending : bool or list of bool, default True

Sort ascending vs. descending. Specify list for multiple sort orders. If this is a list of bools, must match the length of the by.

inplace : bool, default False

if True, perform operation in-place

kind : {‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’

Choice of sorting algorithm. See also ndarray.np.sort for more information. mergesortis the only stable algorithm. For DataFrames, this option is only applied when sorting on a single column or label.

na_position : {‘first’, ‘last’}, default ‘last’

first puts NaNs at the beginning, last puts NaNs at the end

Returns:

sorted_obj : DataFrame

.sort_values函数主要包含6个参数:

columns=》要进行排序的列名称;

ascending=》排序的方式true为升序,False为降序,默认为true;

axis=》排序的轴,0表示index,1表示columns,当对数据列进行排序时,axis必须设置为0;

inplace=》默认为False,表示对数据 表进行排序,不创建新实例;

Kind=》可选择排序的方式,如快速排序等;

na_position=》对NaN值的处理方式,可以选择first和last两种方式,默认为last,也就是将NaN值放在排序的结尾。

对单列数据进行排序

升序
单列数据的排序写清楚要排序的数据表名称,以及要进行排序的列名称,如:

#对数据按照时间的升序排序
gpsData = gpsData.sort_values('gnssTime')
gpsData = gpsData.sort_values('gnssTime',ascending=True)
降序
将ascending参数的值改为False
gpsData = gpsData.sort_values('gnssTime',ascending=False)

对多列数据进行排序

gpsData = gpsData.sort_values('gnssTime','deviceId')

获取时间最小的前5项

gpsData = gpsData.sort_values('gnssTime').head(5)

获取时间最大的前5项

gpsData = gpsData.sort_values('gnssTime',ascending=False).head(5)
对索引进行排序, 返回一个已排序的新对象

pandas.DataFrame.sort_index

DataFrame. sort_index ( axis=0,   level=None,   ascending=True,   inplace=False,   kind='quicksort',   na_position='last', sort_remaining=True,   by=None ) [source]

Sort object by labels (along an axis)

Parameters:

axis : index, columns to direct sorting

level : int or level name or list of ints or list of level names

if not None, sort on values in specified index level(s)

ascending : boolean, default True

Sort ascending vs. descending

inplace : bool, default False

if True, perform operation in-place

kind : {‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’

Choice of sorting algorithm. See also ndarray.np.sort for more information. mergesortis the only stable algorithm. For DataFrames, this option is only applied when sorting on a single column or label.

na_position : {‘first’, ‘last’}, default ‘last’

first puts NaNs at the beginning, last puts NaNs at the end. Not implemented for MultiIndex.

sort_remaining : bool, default True

if true and sorting by level and index is multilevel, sort by other levels too (in order) after sorting by specified level

Returns:

sorted_obj : DataFrame

筛选功能上Pandas使用的是.loc函数

pandas.DataFrame.loc

DataFrame. loc

Purely label-location based indexer for selection by label.

.loc[] is primarily label based, but may also be used with a boolean array.

Allowed inputs are:

  • A single label, e.g. 5 or 'a', (note that 5 is interpreted as a label of the index, and never as an integer position along the index).
  • A list or array of labels, e.g. ['a', 'b', 'c'].
  • A slice object with labels, e.g. 'a':'f' (note that contrary to usual python slices, both the start and the stop are included!).
  • A boolean array.
  • callable function with one argument (the calling Series, DataFrame or Panel) and that returns valid output for indexing (one of the above)

.loc will raise a KeyError when the items are not found.

单列数据筛选并排序

使用.loc对gpsData数据表中deviceId列为5000105792值的数据条目进行了筛选操作,具体的代码和筛选结果如下。在代码中gpsData.loc[]是.loc函数的语法,gpsData[“deviceId”] == “5000105792”是具体的筛选条件。由于数据表较大,因此在最后使用了head()函数只显示前10行筛选结果。从筛选结果来看deviceId列的值都为5000105792

gpsData.loc[gpsData["deviceId"] == "5000105792"].head(10)
筛选条件除了”等于”(==)以外,还可以使用”不等于”(!=)来排除列中特定的值。
很多时候我们只关注数据表中某几列的数据,这时可以在前面筛选代码的基础上增加要显示的列名称和显示顺序。下面是具体的代码和筛选结果。代码部分与之前相比增加了要显示的列名称 [“lat”, “lng”, “speed”]。其余部分均没有改变。在筛选结果的数据表中可以看到仅显示了代码中列出的三列。
gpsData.loc[gpsData["deviceId"] == "5000105792",["lat", "lng", "speed"]].head(10)

若要对筛选结果进行排序可以联合使用.loc函数和.sort函数
下面的代码中首先对数据表的deviceId列进行筛选,选择所有值为5000105792的数据,并限定了结果中要显示的三列的名称。最后对筛选出的结果按speed进行升序排序。
gpsData.loc[gpsData["deviceId"] == "5000105792",["lat", "lng", "speed"]].sort(["speed"])

多列数据筛选并排序

pandas的.loc参数还可以同时对多列数据进行筛选,并且支持不同筛选条件逻辑组合。常用的筛选条件包括”等于”(==)”,不等于”(!),”大于”(>)”,小于”(<)”,大于等于”(>=)” ,小于等于”(<=)等等。逻辑组合包括”与”和”或”。
使用””逻辑,筛选出了deviceId等于5000105792,并且speed大于90的数据。并限定了显示的列名称。
gpsData.loc[(gpsData["deviceId"] == "5000105792") & (gpsData["speed"]>90),["lat", "lng", "speed"]].head()

你可能感兴趣的:(大数据,pandas)