常用pandas命令

    xiaoxiao2024-10-28  75

    常用的pandas命令:行列 row,column pandas 基本的数据结构是 Series(数组) 和 DataFrame(类似二维数组), Pandas 提供了 Index 对象,每个 Series 都会带有一个对应的Index,用来标记不同的元素,Index 的内容不一定是数字,也可以是字母、中文等,它类似于SQL中的主键。

    1.Dateframe的查询

    (1)loc——loc&iloc函数:

    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') ]

    (2)isin——使用isin函数根据特定值筛选记录

    如: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中的行

    (3)at函数

    根据指定行index及列label,快速定位DataFrame的元素,选择列时仅支持列名。 df.at[3,‘a’] 若列用index,则可用iat函数,如:df.iat(3,‘a’)

    (4) 多条件筛选

    可以使用&(并)与| (或)操作符或者特定的函数实现多条件筛选 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)```

    (5)index 即重置行名

    如:df.index=[‘aa’,‘bb’,‘cc’,‘dd’] #即重置行名为aa,bb,cc,dd

    2.DataFrame的index、列名等的重置、排序

    (1)set_index

    设置索引列。 如: 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)

    (2)reset_index()

    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) #索引会被直接删除

    (3)按照某一列的大小进行排序

    sort_index() sort_index(axis=0,ascending=True)

    参数说明

    axis:0按照行名排序;1按照列名排序 ascending:默认True升序排列;False降序排列 如: 将’Date’设置为行索引并按时间排序: app.set_index(‘Date’,inplace=True) app.head()

    sort_values()

    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],即第一字段升序,第二个降序

    (4)rename(columns = {……},inplace=‘True’)改变列名:

    如:

    第一种修改方法

    df_rename = df.rename({'a': 're_a', 'b': 're_b', 'c': 're_c', 'd': 're_d'}, axis='columns') 或者: df_rename({columns='A':'a','B':'b'},inplace='True')

    #即把列中的a,b,c,d分别变为re_a,…

    第二种修改方法

    df_rename = df.rename(index={"07-01": 71, "07-02": 72, "07-03": 73}, columns={'a': 're_a', 'b': 're_b', 'c': 're_c'})

    #即把行的index变,把列变为re_a,…

    3.数据的清洗

    (1)drop_duplicates()

    对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列去重

    (2)drop() drop([],axis=1,inplace=‘True’)

    删除 Series 的元素或 DataFrame 的某一行(列) 如:df.drop([‘oh’,‘te’],axis=1) # 删除oh,te列

    (3)dropna()

    删除含有空数据的全部行 df4 = df4.dropna(axis=1)# 通过axis参数来删除含有空数据的全部列 df4 = df4.dropna(subset=[“age”, “sex”])# subset参数删除在age和sex中含有空数据的全部行

    (4)fillna()

    df1.fillna(100) #用常数100填充空格/缺失数据/NAN 通过字典填充不同的常数: df1.fillna({0:10,1:20,2:30})#第1,2,3,列分别填充10,20,30

    4.两个DataFrame的合并

    (1)append()

    (2)concat()沿着一条轴,将多个对象堆叠到一起

    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的时候,后面的索引直接全部改变成数字。

    (3)merge() 通过键拼接列 默认去交集inner

    针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面。

    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,保留公共,左边表,右边表,都保留的意思

    join() 少用

    c = a.join(b, how='inner')

    5.数据的处理

    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的类型

    创建Dataframe

    import pandas as pd df1 = pd.DataFrame([[[1,2,3],[1,10,20]],columns=['x1','x2']) 或 df = pd.DataFrame({'a':['a0','a1'],'b':['b1;,'b2'],'c':['c1','c2','c3']})
    最新回复(0)