import numpy as np import pandas as pd df = pd.DataFrame({'col1':[np.NaN,2,3,4],'col2':[2,np.NaN,4,5],'col3':[3,4,5,6]}) df.columns = [['col','col','col'],['col1','col2','col3']] # 重置列名,多重列名 ''' col col1 col2 col3 0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6 ''' # df = pd.DataFrame({'col1':[np.NaN,2,3,4],'col2':[2,3,4,5],'col3':[3,4,5,6]}) res = df['col']['col1'].isna().any() # 判断某列是否全部(.all())为空,或者部分为空 ''' False ''' def apply1(data,var): return 'a' result = df.groupby([('col','col1')]).apply(apply1,'xxx') # 根据某列分组(多重列名分组),括号里为多重索引的列名 df1 = pd.DataFrame(result,columns=[['value'],['value1']]) # apply返回一个值,出来后可再把result pd.DataFrame化, # 如果给一个columns,就是给这个值赋一个列名,当然也可给一个 # 多重列名([[第一行].[第二行]]) # 如果用apply方法,一定要注意返回值,控制好返回值的类型,实在不行就 # DataFrame吧,别问我为什么!!! ''' value (col, col1) 1 a 2 a 3 a 4 a ''' df1.reset_index(inplace=True) # 重置索引,groupby会把传入的列名作为索引,如果要输出格式好看一点,一定要reset_index ''' (col, col1) value 0 1 a 1 2 a 2 3 a 3 4 a ''' # agg暂不讨论,暂时还没怎么用到 df[~df['col']['col1'].isin(['2'])] # isin里,如果是str.isnumeric()为True,就不用把参数强转为int ''' col col1 col2 col3 0 1 2 3 2 3 4 5 3 4 5 6 ''' print(df) df['col']['col1']+df['col']['col2'] # np.NaN +-*/ int = np.NaN ''' 0 NaN 1 NaN 2 7.0 3 9.0 '''
pandas 私货
最新推荐文章于 2024-08-13 16:49:34 发布