常用的pandas命令:行列 row,column pandas 基本的数据结构是 Series(数组) 和 DataFrame(类似二维数组), Pandas 提供了 Index 对象,每个 Series 都会带有一个对应的Index,用来标记不同的元素,Index 的内容不一定是数字,也可以是字母、中文等,它类似于SQL中的主键。
loc函数:通过行索引 “Index” 中的具体标签来取行数据(如取"Index"为"A"的行) iloc函数:通过行号(位置)来取行数据 如: data.loc[‘a’] #即取索引为a的行 data.loc[:,[‘A’]] #取’A’列所有行,多取几列格式为 data.loc[:,['A','B']] data.iloc[:,[0]] #取第0列所有行,多取几列格式为 data.iloc[:,[0,1]] 利用loc函数,根据某个数据来提取数据所在的行 data.loc[data[‘A’]==0] #提取data数据(筛选条件: A列中数字为0所在的行数据)
data.loc[(data['A‘]==0) & ([data['data_io']>'2018-05-08') ]如:df[df.a.isin([30,54])] #即筛选a值=30或54的记录 如:pi_df = pi_df.loc[~pi_df.index.isin(s_df_main.index)].copy() #从pi_df中筛选index不在s_df_main中的行
根据指定行index及列label,快速定位DataFrame的元素,选择列时仅支持列名。 df.at[3,‘a’] 若列用index,则可用iat函数,如:df.iat(3,‘a’)
可以使用&(并)与| (或)操作符或者特定的函数实现多条件筛选 df[(df[‘a’] > 30) & (df[‘b’] > 40)] 使用&筛选a列的取值大于30,b列的取值大于40的记录
先取出index,再合并set,进而isin a = valid_i0.reset_index().set_index('cols').index.unique() b= valid_s.reset_index().set_index('cols').index.unique() ab_valid = set(po_valid_i0) | set(po_valid_s) c.set_index('cols', inplace=True) c = c.loc[(c['is_store'] != 1) | (po.index.isin(po_valid))].copy() po.reset_index(inplace=True)```如:df.index=[‘aa’,‘bb’,‘cc’,‘dd’] #即重置行名为aa,bb,cc,dd
设置索引列。 如: new_df_drop_t = df.set_index(‘A’) #设置A列为索引列,同时删去之前的列 new_df_drop_f = df.set_index(‘A’,drop=False) #设置A列为索引列,并不删去之前列
加上inplace='True',原有表名称发生变化,如mng_wh_info mng_wh_info.set_index('org_id', inplace=True) mng_wh_info.sort_index(inplace=True)reset_index还原分为两种类型, 第一种是对原DataFrame进行reset, new_reset_index = df.reset_index(drop=False) # 原有的索引不变添加列名index,同时在新列上重置索引 new_reset_index = df.reset_index(drop=True) # 在原有的索引列重置索引,不再另外添加新列
第二种是对使用过set_index()函数的DataFrame进行reset new_reset_index = newdf.reset_index(drop=False) #索引列会被还原为普通列 默认的 new_reset_index = newdf.reset_index(drop=True) #索引会被直接删除
sort_index() sort_index(axis=0,ascending=True)
axis:0按照行名排序;1按照列名排序 ascending:默认True升序排列;False降序排列 如: 将’Date’设置为行索引并按时间排序: app.set_index(‘Date’,inplace=True) app.head()
DataFrame.sort_values(by=[’’], axis=0, ascending=True)
axis:{0 or ‘index’, 1 or ‘columns’} by:str or list of str;如果axis=0,那么by=“列名”;如果axis=1,那么by=“行名”; ascending:True升序,可以是[True,False],即第一字段升序,第二个降序
如:
#即把列中的a,b,c,d分别变为re_a,…
#即把行的index变,把列变为re_a,…
对DataFrame格式的数据,去除特定列下面的重复行。返回DataFrame格式的数据。 data.drop_duplicates([‘k2’]) #对特定列k2去重
df.drop_duplicates(subset=['B'],keep=first,inplace=True) #只考虑B列(默认为所有列),keep=first默认保留第一次出现的值 df.drop_duplicates(subset=[a', 'b'], inplace=True) # a列和b列去重删除 Series 的元素或 DataFrame 的某一行(列) 如:df.drop([‘oh’,‘te’],axis=1) # 删除oh,te列
删除含有空数据的全部行 df4 = df4.dropna(axis=1)# 通过axis参数来删除含有空数据的全部列 df4 = df4.dropna(subset=[“age”, “sex”])# subset参数删除在age和sex中含有空数据的全部行
df1.fillna(100) #用常数100填充空格/缺失数据/NAN 通过字典填充不同的常数: df1.fillna({0:10,1:20,2:30})#第1,2,3,列分别填充10,20,30
axis是关键,它用于指定是行还是列,axis默认是0,列;1,行 如:
frames = [df1, df2] pd.concat(frames) #拼接df1及df2,上面是df1,下面是df2 pd.concat([df1,df1],ignore_index=True) 默认ignore_index=False,此时后面的DataFrame中的索引直接拼接在后面, 而ignore_index=True的时候,后面的索引直接全部改变成数字。针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面。
pd.merge(df1, df2[['a', 'b', 'c']].drop_duplicates(), how='inner', on=['a', 'b', 'c']) df1,和df2中都存在a,b,c三列,将abc作为公共列予以合并 how=inner,left,right,outer,保留公共,左边表,右边表,都保留的意思groupby().sum()
df1=df.groupby(['a','b','c','d','e'])[['quant_io']].sum() 以abcde作为一组,对quant_io求和groupby().apply()#apply里跟各种函数 如: groupby(‘A’).apply(np.mean)与groupby(‘A’).mean()计算结果是一致的
或: df1=df['quant_io'].apply(np.sign) 符号函数,直接判断quant_io是否为正,0,1 具体 df['qty'][df['qty']<0]=0 df1=df['qty'].apply(np.sign)其它: (1)[] 选择列,选择行 df[‘A’] 通过name(键)选择列 df[[‘A’,‘B’]] 通过list选择列 df[0:3]通过index所在行选择行 df[‘20130102’:‘20130104’] 通过行index(键)选择行 dataset[(dataset[‘Sex’] == i) & (dataset[‘Pclass’] == j+1)][‘Age’] #布尔运算选择数据,以其他列为条件筛选数据,注意做布尔运算时最好将每个运算用括号括起来,像以下这种就会容易出问题:dataset[dataset[‘TARGET’].notnull() & dataset[‘need_pre’]!=1 ]
加不加[],生成的类型是不同的 type(data[“A1”]) pandas.core.series.Series type(data[[“A1”]]) pandas.core.frame.DataFrame
df[‘quant_io’] = df[‘quant_io’].astype(int) 强制将quant_io列转换成int整型 df.dtypes 检测dataframe df的类型