简单pythonのDataFrame的[增、删、改、查]操作

from pandas import DataFrame
df1 = DataFrame([['aa','bb','cc'],['A','B','C'],['a','b','c']],index=['r1','r2','r3'],columns=['c1','c2','c3'])
print(df1)
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r2   A   B   C
>>r3   a   b   c

# 直接访问列名来访问对应的 变量名[列名称1,列名称2,...]:
>>r1    aa
>>r2     A
>>r3     a
>>Name: c1, dtype: object
        #离散选取不同的列
print(df1[['c1','c3']])
>>    c1  c3
>>r1  aa  cc
>>r2   A   C
>>r3   a   c 
	#需要一块连续的列位置时:直接调用.columns[c1:c2]属性切片 左闭右开 c1 到c2-1
    #值得注意的是,变量名.columns[c1:c2] 中的 c1 与 c2 只接受整型参数
print(df1[df1.columns[0:2]])
>>    c1  c2
>>r1  aa  bb
>>r2   A   B
>>r3   a   b    

# 使用切片的形式访问对应的行: 变量名[r1:r2] 访问 从r1 到 r2-1行的数据(其中列全部被包含)
print(df1[0:2])
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r2   A   B   C


#<<===============================使用 变量名.loc[] ===============================>>
#使用格式 变量名.loc[行名称1:行名称2,列名称1:列名称2] 
#选取该从行名称1 到 行名称2 与 列名称1 到 列名称2 范围的所有数值
    
	#当不写切片时,为精确查找某个位置上的值
print(df1.loc['r1','c1'])	
>>aa

    #知道行与列名称===================
print(df1.loc['r1':'r2','c1':'c3'])
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r2   A   B   C
	#离散的选取行
    #上面的行选择是使用了切片产生了一个列表作为行的选择,在这里我们手动构造了一个行名字[列表]
print(df1.loc[['r1','r3'],'c1':'c3'])
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r3   a   b   c
	
    #知道行下标与列名称================
print(df1.loc[df1.index[0:3],'c1':'c3'])
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r2   A   B   C
>>r3   a   b   c   
	#离散的选取行
    #我们也可以选择使用 变量名.index[[r1,..,rn]] 来获得指定列表中的对应行(r1,...,rn)的名称
print(df1.loc[df1.index[[0,2]],'c1':'c3'])
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r3   a   b   c    

	#知道行名称与列下标================
print(df1.loc['r1':'r3',df1.columns[0:3]])
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r2   A   B   C
>>r3   a   b   c  
	#离散的选取列
print(df1.loc['r1':'r3',df1.columns[[0,2]]])
>>    c1  c3
>>r1  aa  cc
>>r2   A   C
>>r3   a   c


#<<=============================== 变量名.iloc[] ===============================>>
#使用格式 变量名.iloc[r1:r2,c1:c2] 选取,其中参数均为整型。
#选取从 第r1行 到 r2行-1 与 c1列 到c2-1列范围内的所有数值 

	#这个也同理,不写切片形式时,将精确到一个数据
print(df1.iloc[0,0])
>>aa  

	#知道行位置与列位置================
print(df1.iloc[0:3,0:3])
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r2   A   B   C
>>r3   a   b   c
	#离散的选取
print(df1.iloc[[0,2],0:3])
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r3   a   b   c    

	#知道行名称与列下标================
print(df1.iloc[df1.index.get_loc('r1'):3,0:3])
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r2   A   B   C
>>r3   a   b   c
    #离散的选取
print(df1.iloc[[df1.index.get_loc('r1'),df1.index.get_loc('r3')],0:3]) 
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r3   a   b   c    

	#知道行下标与列名称================
print(df1.iloc[0:3,df1.columns.get_loc('c1'):df1.columns.get_loc('c3')+1])
	#这里需要注意的是,切片区间为左闭右开,故用get_loc取得数值作为右区间时得+1
>>    c1  c2  c3
>>r1  aa  bb  cc
>>r2   A   B   C
>>r3   a   b   c
	#离散的选取与前面的思想一样
print(df1.iloc[0:3,[df1.columns.get_loc('c1'),df1.columns.get_loc('c3')]])
>>    c1  c3
>>r1  aa  cc
>>r2   A   C
>>r3   a   c    
    

#<<===============================使用 变量名.at[行名称,列名称] ===============================>>   
#用法 变量名.at[行名称,列名称] 精确到什么行名称中的什么列名称中的一个值    

print(df1.at['r1','c1'])
>>aa

#采用 变量名.iat[r1,c1] 精确到第r1行第c1列中的一个值
print(df1.iat[0,0])
>>aa

#	===小总结 方法中 名字前面带 i 的只接受参数为整型,不带 i 的接受参数为自定义的

#修改列名称
df1.columns = ['C1','C2','C3']
print(df1)
>>    C1  C2  C3
>>r1  aa  bb  cc
>>r2   A   B   C
>>r3   a   b   c

#修改行索引
df1.index = ['R1','R2','R3']
print(df1)
>>    c1  c2  c3
>>R1  aa  bb  cc
>>R2   A   B   C
>>R3   a   b   c
        
#删除
	#以下两种均不会改变原序列
	#根据行名来删除 其中axis可省略不写,默认=0 表示按行删除
print(df1.drop('r1',axis=0))
>>   c1 c2 c3
>>r2  A  B  C
>>r3  a  b  c    
	#根据列名删除,其中axis=1不可省略。
print(df1.drop('c1',axis=1))
>>    c2  c3
>>r1  bb  cc
>>r2   B   C
>>r3   b   c    
    #第二种删除列的方法:使用del ,将会改变原序列
del df1['c1']
print(df1)
>>    c2  c3
>>r1  bb  cc
>>r2   B   C
>>r3   b   c
	
#增    
    #添加新的一列
df1['c4'] = ['test1','test2','test3']
print(df1)
>>    c1  c2  c3     c4
>>r1  aa  bb  cc  test1
>>r2   A   B   C  test2
>>r3   a   b   c  test3

    #添加新的一行
    #这里是将两个DataFrame用append方法合并。且,需要明确声明新建合并的DataFrame中的列名
    #如果不声明列名,将会出现和与Series一样的情况:出现很多NaN,因为,新建的DataFrame列名默认从0开始
df2 = df1.append(DataFrame([['newA','newB','newC']],index=['r4'],columns=['c1','c2','c3']))
print(df2)
>>      c1    c2    c3
>>r1    aa    bb    cc
>>r2     A     B     C
>>r3     a     b     c
>>r4  newA  newB  newC  
	#或是这样:与上述方法效果一样
df1.loc['r4'] = ['newA','newB','newC']    
	#若是添加了ignore_index = True 参数的话,将置全部的行名从0开始
df2 = df1.append(DataFrame([['newA','newB','newC']],index=['r4'],columns=['c1','c2','c3']),ignore_index=True)
print(df2)
>>     c1    c2    c3
>>0    aa    bb    cc
>>1     A     B     C
>>2     a     b     c
>>3  newA  newB  newC    

上一篇:从零开始入门 K8s | Kata Containers 创始人带你入门安全容器技术


下一篇:机械换固态