Python数据分析易错知识点归纳(五):横向对比

五、横向对比

排序

# 列表
a.sort()   # 修改原列表,返回值为None!!!!!这里很容易出错
sorted(a)  # 生成新的列表

# 嵌套列表的排序(若是对字典排序,需先用list()转成列表形式)
li = [['A', 90], ['B', 20], ['C', 50]]
# 利用sorted()函数中的key属性重新建立排序规则
li = sorted(li, key=lambda x: x[1], reverse=True)

# numpy
#numpy.sort()函数返回输入数组的排序副本
#numpy.sort(a, axis, kind, order)
#axis: 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排序, axis=0 按列排序,axis=1 按行排序
#kind: 默认为'quicksort'(快速排序)
#order: 如果数组包含字段,则是要排序的字段
a = np.array([[3, 7], [9, 1]])
print('原数组:')
print(a)
print('调用sort() 函数:')
print(np.sort(a))
print('按列排序:')
print(np.sort(a, axis=0))

# 注意这两种排序结果的区别
print(sorted([[1,2,3],[0,1,1],[2,0,1]]))  # 只看子列表中的第一个元素
'''
[[0, 1, 1], [1, 2, 3], [2, 0, 1]]
'''
print(np.sort([[1,2,3],[0,1,1],[2,0,1]]))  # 默认axis=1
'''
[[1 2 3]
 [0 1 1]
 [0 1 2]]
'''

# Series
se.sort_values(ascending=False, inplace=True) #注意Series排序没有by参数

# dataframe
# 根据值排序
df.sort_values(by='A')  
df.sort_values(by='A', ascending=False)  # 逆序,默认升序  
df.sort_values(by='A', inplace=True)  # 改变原df
df.sort_values(by=['A', 'B'])
# 根据index排序
df.sort_index(ascending=False)  # 用法与上面基本一致,只是没有by

逆序排序参数

列表:reverse=True

numpy、pandas: ascending=False

字典遍历和dataframe遍历的区别

# 字典遍历
for eachItem in dict1.items():
	print(eachItem)

# Series遍历
for index, value in se.iteritems():
    print(index) # 索引名
    print(value) # 值
    
# dataframe遍历(分按行遍历和按列遍历)
# 按行遍历
for index, row in df.iterrows():
    print(index) # 行名
    print(row) # 每一行,为Series
# 按列遍历
for col_name,column in df.iteritems():
	print(col_name) # 列名
    print(column) # 每一列,为Series
 

列表和集合删除元素

remove pop del discard
列表 返回None;若不存在会报错 返回删除元素;参数默认为0,表示元素下标,超出会报错 例:del member[1]
集合 同上 同上 返回None; 若不存在不会报错

不同的numpy生成方法形成的行列数量区别

np.ones   np.eye  np.zeros  np.full

pandas删除行、列

df.drop

  • 删除行
# 通过行名称删除:
df = df.drop(['1', '2'])      # 不指定axis默认为0
df.drop(['1', '3'], inplace=True)  # 注意若多行有相同行名,都删除

# 通过行号删除
df.drop(df.index[0], inplace=True)    # 删除第1行
df.drop(df.index[0:3], inplace=True)   # 删除前3行
df.drop(df.index[[0, 2]], inplace=True) # 删除第1第3行

# 通过过滤条件进行切片(实际应用时一般用)
chooses = df['B'].drop_duplicates().index
df.loc[chooses]
  • 删除列
del df['A'] # 删除A列,会就地修改

df = df.drop(['B', 'C'], axis=1)        # drop不会就地修改,创建副本返回

df.drop(['B', 'C'], axis=1, inplace=True)   # inplace=True会就地修改

过滤空值

  • numpy 判断空值用np.isnan,其参数可以是数值或Numpy,也可以是DataFrame或Series

    a = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])
    # ~取补运算符过滤NaN
    print('非空过滤数组:')
    print(a[~np.isnan(a)])
    
  • pandas 判断空值用isnull(),只能作用于DataFrame或Series

    df = df[df['one'].isnull()]
    df = df[df['one'].notnull()]
    
    df = df.dropna()  # 删除全部是空值的行
    df = df.dropna(subset=['one'])  # 删除某一列是空值的行
    

pd开头的方法

  • pd.DataFrame / pd.Series
  • pd.set_option
  • pd.read_csv / pd.read_excel
  • pd.concat
  • pd.merge
  • pd.qcut
  • pd.get_dummies
  • pd.pivot_table
  • pd.crosstab

prefix/suffixes

  • prefix 在pd.get_dummies中使用
  • suffixes 在pd.merge中使用
posted @ 2022-09-05 11:01  Steven0325  阅读(164)  评论(0编辑  收藏  举报