1. 创建一个空的DataFrame
df_empty = pd.DataFrame(columns=['A', 'B', 'C', 'D'])
2.分组
使用聚合函数时,可以不生成索引。
df.groupby(['a','b'],as_index=False).mean()
3.转换
聚合只是其中的一种方法,转换也是。
4.层次化索引选取
根据索引获取数据。因为现在有两层索引,当通过外层索引获取数据的时候,可以直接利用外层索引的标签来获取。当要通过内层索引获取数据的时候,在list中传入两个元素,前者是表示要选取的外层索引,后者表示要选取的内层索引。
# 外层选取
print(ser_obj['c'])
# 内层选取
print(ser_obj[:, 1])
# 外层+内层选取
print(ser_obj['c', 2])
可以利用索引来筛选数据:可以使用loc, iloc, query
#使用query
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])
df = pd.DataFrame({'A': [1, 1, 1, 1, 2, 2, 3, 3], 'B': np.arange(8)},index=index)
print(df)
print(df.query('second=="one"'))
5.删除数据
(1)drop函数的用法
pandas.DataFrame.drop¶
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
Drop specified labels from rows or columns.
作用删除特定行或者列: 使用index=labels相当于同时指定 (labels, axis=0) ,使用columns=labels,相当于同时指定(labels, axis=1)。
(2)del函数的用法,这个函数比较简单一些
具体的用法如下:
del
df[
'A'
]
# 删除A列,会就地修改
(3)可能drop函数相关的函数还有一些dropna() 和drop_duplicated() 函数
pandas.DataFrame.dropna
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)[source]
how {‘any’, ‘all’}, default ‘any’
Determine if row or column is removed from DataFrame, when we have at least one NA or all NA.
-
‘any’ : If any NA values are present, drop that row or column.
-
‘all’ : If all values are NA, drop that row or column.
subset array-like, optional
-
Labels along other axis to consider, e.g. if you are dropping rows these would be a list of columns to include.
可以使用subset选择特定几列有空值的进行删除
df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
"toy": [np.nan, 'Batmobile', 'Bullwhip'],
"born": [pd.NaT, pd.Timestamp("1940-04-25"),
pd.NaT]})
df
name toy born
0 Alfred NaN NaT
1 Batman Batmobile 1940-04-25
2 Catwoman Bullwhip NaT
df.dropna(subset=['name', 'toy'])
name toy born
1 Batman Batmobile 1940-04-25
2 Catwoman Bullwhip NaT
6.python 获取一维或者二维数组的最大(最小)N个值
import heapq
a=[43,5,65,4,5,8,87]
re1 = heapq.nlargest(3, a) #求最大的三个元素,并排序
re2 = map(a.index, heapq.nlargest(3, a)) #求最大的三个索引 nsmallest与nlargest相反,求最小
print(re1)
print(list(re2)) #因为re2由map()生成的不是list,直接print不出来,添加list()就行了
import heapq
import numpy as np
import random
a = np.random.randint(50,size= (4,5))
a = np.array(a)
print(a)
lists = [[] for i in range(4)]
for i in range(len(a)):
lists[i] = heapq.nlargest(3, a[i])
print(lists)