首页 > 其他分享 >pandas dataframe 过滤——apply最灵活!!!

pandas dataframe 过滤——apply最灵活!!!

时间:2023-05-31 16:07:59浏览次数:45  
标签:INDEX pkt df dataframe MetaIndex time apply pandas row

按照某特定string字段长度过滤:

import pandas as pd

df = pd.read_csv('filex.csv')
df['A'] = df['A'].astype('str')
df['B'] = df['B'].astype('str')
mask = (df['A'].str.len() == 10) & (df['B'].str.len() == 10)
df = df.loc[mask]
print(df)

  

Applied to filex.csv:

A,B
123,abc
1234,abcd
1234567890,abcdefghij

the code above prints

A           B
2  1234567890  abcdefghij

或者是:

data={"names":["Alice","Zac","Anna","O"],"cars":["Civic","BMW","Mitsubishi","Benz"],
     "age":["1","4","2","0"]}

df=pd.DataFrame(data)
"""
df:
  age        cars  names
0   1       Civic  Alice
1   4         BMW    Zac
2   2  Mitsubishi   Anna
3   0        Benz      O
Then:
"""

df[
df['names'].apply(lambda x: len(x)>1) &
df['cars'].apply(lambda x: "i" in x) &
df['age'].apply(lambda x: int(x)<2)
  ]
"""
We will have :
  age   cars  names
0   1  Civic  Alice
"""

  

最灵活的是用apply:

def load_metadata(dir_name):    
    columns_index_list = [
        MetaIndex.M_METADATA_ID_INDEX,
        MetaIndex.M_SRC_IP_INDEX,
        MetaIndex.M_DST_IP_INDEX,
        MetaIndex.M_SRC_PORT_INDEX,
        MetaIndex.M_DST_PORT_INDEX,
        MetaIndex.M_PROTOCOL_INDEX,
        MetaIndex.M_HEADER_H,
        MetaIndex.M_PAYLOAD_H,
        MetaIndex.M_TCP_FLAG_H,
        MetaIndex.M_FLOW_FIRST_PKT_TIME,
        MetaIndex.M_FLOW_LAST_PKT_TIME,
        MetaIndex.M_OCTET_DELTA_COUNT_FROM_TOTAL_LEN,
    ]
    columns_name_list = [
        "M_METADATA_ID_INDEX",
        "M_SRC_IP_INDEX",
        "M_DST_IP_INDEX",
        "M_SRC_PORT_INDEX",
        "M_DST_PORT_INDEX",
        "M_PROTOCOL_INDEX",
        "M_HEADER_H",
        "M_PAYLOAD_H",
        "M_TCP_FLAG_H",
        "M_FLOW_FIRST_PKT_TIME",
        "M_FLOW_LAST_PKT_TIME",
        "M_OCTET_DELTA_COUNT_FROM_TOTAL_LEN",
    ]

    def metadata_parse_filter(row):
        try:
            if row['M_PROTOCOL_INDEX'] != 6:
                return False
            if len(row['M_HEADER_H']) < 2 or len(row['M_PAYLOAD_H']) < 2 or not is_l34_tcp_metadata(row['M_METADATA_ID_INDEX']):
                return False
            first_time = row['M_FLOW_FIRST_PKT_TIME'].split('-')
            last_time = row['M_FLOW_LAST_PKT_TIME'].split('-')

            flow_first_pkt_time = int(first_time[0])
            rev_flow_first_pkt_time = int(first_time[1])

            flow_last_pkt_time = int(last_time[0])
            rev_flow_last_pkt_time = int(last_time[1])
            if flow_first_pkt_time > flow_last_pkt_time or rev_flow_first_pkt_time > rev_flow_last_pkt_time:
                return False
            return True
        except Exception as e:
            return False

    for root, dirs, files in os.walk(dir_name):
        for filename in files:
            file_path = os.path.join(root, filename)
            df = pd.read_csv(file_path, delimiter='^', usecols=columns_index_list, names=columns_name_list, encoding='utf-8', error_bad_lines=False, warn_bad_lines=True, header=0, lineterminator="\n")
            filter_df = df.loc[df.apply(metadata_parse_filter, axis=1)]
            yield filter_df

 直接按照row过滤! 

标签:INDEX,pkt,df,dataframe,MetaIndex,time,apply,pandas,row
From: https://blog.51cto.com/u_11908275/6387644

相关文章

  • pandas groupby 分组操作
    最一般化的groupby方法是apply.tips=pd.read_csv('tips.csv')tips[:5]新生成一列tips['tip_pct']=tips['tip']/tips['total_bill']tips[:6]根据分组选出最高的5个tip_pct值deftop(df,n=5,column='tip_pct'):returndf.sort_index(by=colum......
  • 办公自动化pandas
    需求如下:实现代码:未优化代码importpandasaspddefrep_huan():#读取excel文件df1=pd.read_excel('data1.xlsx')#表一df2=pd.read_excel('data2.xlsx')#表二replace_dict=[]forxm,ncinzip(df1['姓名'],df1[�......
  • 将字典转为dataframe
    将字典转为dataframe使用案例:test_dic={'subject':[],'time':[],'name':[]}test_dic['subject'].append('play')test_dic['time'].append('2023:10:10')test_dic['name'].append('jack&......
  • pandas是干什么的
    Pandas是一个开源的数据分析和数据处理库,建立在NumPy库之上。它提供了一组高效的数据结构和数据分析工具,使得在Python中进行数据操作变得更加简单和灵活。Pandas的主要数据结构是两种核心对象:Series和DataFrame。Series是一维标记数组,类似于带有标签的数组。它可以存......
  • Pandas 加载数据的方法和技巧
    哈喽大家好,我是咸鱼相信小伙伴们在学习python数据分析的过程中或多或少都会听说或者使用过pandaspandas是python的一个拓展库,常用于数据分析今天咸鱼将介绍几个关于pandas导入数据的方法和技巧从URL获取csv数据关于pandas导入csv数据,使用的是下面这个方法pa......
  • DataFrame转为数组Array
    DataFrame转为数组Array有文本数据如下:目标:将文本数据以数组形式呈现步1:读入数据importpandasaspddata=pd.read_table(file_path,sep=',',header=None)数据呈现如下:步2:将dataframe转为数组data_x=np.array(data[0].tolist())data_y=np.array(data[1].tol......
  • 【pandas基础】--数据类型
    数据类型是计算机编程中将不同类型的数据值分类和定义的方式。通过数据类型,可以确定数据的存储方式和内存占用量,了解不同类型的数据进行各种运算的能力。使用pandas进行数据分析时,最常用到的几种类型是:字符串类型,各类文本内容都是字符串类型数值类型,包括整数和浮点数,可用于计......
  • Pandas数据框去重复(AB、BA类型)
    <生信交流与合作请关注公众~号@生信探索>从string-db下载蛋白质相互作用的信息,在处理时发现蛋白A与B互作被记录了两次比如下边的例子(即AB、BA)df.drop_duplicates()#Symbol1Symbol2#Gnai3Pdcl2#Pdcl2Gnai3#Gm4340Gm3376#Gm3376Gm4340而且drop_duplicates不......
  • 深入理解 apply()方法
      apply(thisArg)apply(thisArg,argsArray)thisArg在 func 函数运行时使用的 this 值。请注意,this 可能不是该方法看到的实际值:如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装。argsArray 可选一个数组或......
  • javascript的 this 详解以及apply与call的用法意义及区别
    [color=red][b]关于JavaScript中apply与call的用法意义及区别[/b][/color][url]http://www.cnitblog.com/yemoo/archive/2007/11/30/37070.aspx[/url][color=red][b]JAVASCRIPTTHIS详解[/b][/color]在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++、C#和Java等都......