import pandas as pd
import numpy as np
import copy
data=np.array([[1,6,3],[4,5,2],[9,0,7]])
dft=pd.DataFrame(data,index=['line0','line1','line2'],columns= ['a', 'b', 'c'])
dft
dft
a b c
line0 1 6 3
line1 4 5 2
line2 9 0 7
dftc = copy.deepcopy(dft)
dftc
a b c
line0 1 6 3
line1 4 5 2
line2 9 0 7
#删除dftc 列a 值为1的行
#~表示取反
dftc1 = dftc[~dftc['a'].isin([1])]
dftc1
a b c
line1 4 5 2
line2 9 0 7
#删除dftc 列b 值为0的行
dftc2 = dftc[~dftc['b'].isin([0])]
dftc2
a b c
line0 1 6 3
line1 4 5 2
注:若某列没有包含要删除的值,则不做任何删除。
dftc.iat[0,1]
6
cols=[x for i,x in enumerate(dftc.columns) if dftc.iat[0,i]==6]
cols
['b']
dftc3=dftc.drop(cols,axis=1)
dftc3
a c
line0 1 3
line1 4 2
line2 9 7
cols=[x for i,x in enumerate(dftc.columns) if dftc.iat[1,i]==2]
cols
['c']
dftc3=dftc.drop(cols,axis=1)
dftc3
a b
line0 1 6
line1 4 5
line2 9 0
enumerate() 函数:用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
enumerate(sequence, [start=0])
sequence -- 一个序列、迭代器或其他支持迭代对象。
start -- 下标起始位置。
df.drop(name,axis=1):删除指定行或列;name为单行/列名字符/多行/列列表。
dftc.drop(['a', 'b'],axis=1)
c
line0 3
line1 2
line2 7
rows=[x for i,x in enumerate(dftc.index) if dftc.iat[1,i]==2]
rows
['line2']
dftc3=dftc.drop(rows,axis=0)
dftc3
a b c
line0 1 6 3
line1 4 5 2
df.dropna(axis=0, how='any', inplace=True)
axis:0-行操作(默认),1-列操作
how:any-只要有空值就删除(默认),all-全部为空值才删除
inplace:False-返回新的数据集(默认),True-在愿数据集上操作
dftc4 = copy.deepcopy(dft)
dftc4.iloc[1,2] = np.nan
dftc4.iloc[1,0] = np.nan
dftc4.iloc[2,0] = np.nan
dftc5 = copy.deepcopy(dftc4)
dftc5
a b c
line0 1.0 6 3.0
line1 NaN 5 NaN
line2 NaN 0 7.0
dftc4.dropna(axis=0, how='any', inplace=True)
dftc4
a b c
line0 1.0 6 3.0
dftc5.dropna(axis=1, how='any', inplace=True)
dftc5
b
line0 6
dftc5['a'].unique()
array([ 1., nan])