pandas dataframe 过滤——apply最灵活!!!
按照某特定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过滤!
pandas dataframe 过滤——apply最灵活!!!的更多相关文章
- pandas DataFrame apply()函数(1)
之前已经写过pandas DataFrame applymap()函数 还有pandas数组(pandas Series)-(5)apply方法自定义函数 pandas DataFrame 的 app ...
- pandas DataFrame apply()函数(2)
上一篇pandas DataFrame apply()函数(1)说了如何通过apply函数对DataFrame进行转换,得到一个新的DataFrame. 这篇介绍DataFrame apply()函数 ...
- Pandas DataFrame数据的增、删、改、查
Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...
- Pandas DataFrame 函数应用和映射
apply Numpy 的ufuncs通用函数(元素级数组方法)也可用于操作pandas对象: 另一个常见的操作是,将函数应用到由各列或行所形成的一维数组上.Dataframe的apply方法即可实现 ...
- 【338】Pandas.DataFrame
Ref: Pandas Tutorial: DataFrames in Python Ref: pandas.DataFrame Ref: Pandas:DataFrame对象的基础操作 Ref: C ...
- 更改 pandas dataframe 中两列的位置
更改 pandas dataframe 中两列的位置: 把其中的某列移到第一列的位置. 原来的 df 是: df = pd.read_csv('I:/Papers/consumer/codeandpa ...
- pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...
- pandas.DataFrame对象解析
pandas.DataFrame对象类型解析 df = pd.DataFrame([[1,"2",3,4],[5,"6",7,8]],columns=[&quo ...
- pandas.DataFrame学习系列1——定义及属性
定义: DataFrame是二维的.大小可变的.成分混合的.具有标签化坐标轴(行和列)的表数据结构.基于行和列标签进行计算.可以被看作是为序列对象(Series)提供的类似字典的一个容器,是panda ...
随机推荐
- 使用v-for循环写入html内容,每一项的数据的写入
项目使用vue.js,在写某个dialog页面时,需要循环后台的数据(班级,班级学生名单,已选学生名单,发布时间,截止时间,答案显示等). 遇到的问题:循环绑定的值是相同的,而且改动一个值,其他ite ...
- 百度地图自定义icon,定位偏移问题
最近使用百度地图做一个调度系统,使用定义icon的marker,结果地图显示marker和实际位置偏移,最终参考文章: http://www.cnblogs.com/jz1108/archive/20 ...
- Spring重要注解@ControllerAdvice
@ControllerAdvice是一个@Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMa ...
- [原][osg][osgearth]倾斜摄影1.介绍
总体介绍: 倾斜摄影就是将拍好的数据,三角网格化再附上贴图. 目前流行处理软件: Street Factory.PIX4DMapper.smart3D 后期开发平台:超图 Skyline smart3 ...
- System.out.println 报错: 只能运行在方法体内哦, 类里面只包含属性和方法哦,注意!
类里面包含属性和方法 所以, System.out.println,只能放在方法体内运行,不能放在类里.方法外哦
- leecode第九题(回文数)
class Solution { public: bool isPalindrome(int x) { ) return false; ;//这里使用long,也不判断溢出了,反正翻转不等就不是回文 ...
- Java离线人脸识别SDK 支持arcface 2.0 最新版
虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! JDK SDK Win release license status 前言 由于业务需求,最近跟人脸识别 ...
- Lua和C++交互 学习记录之六:全局函数交互
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- JAVA基础知识总结:十三
测试用一个字符串常量创建一个字符串对象 1.获取这个字符串的长度 2.获取任意长度的子串 3.判断这个字符串是否为空 4.将这个字符串中的小写字母转化为大写字母 5.获取某个字符在字符串中第一次出现的 ...
- 猫眼电影爬取(一):requests+正则,并将数据存储到mysql数据库
前面讲了如何通过pymysql操作数据库,这次写一个爬虫来提取信息,并将数据存储到mysql数据库 1.爬取目标 爬取猫眼电影TOP100榜单 要提取的信息包括:电影排名.电影名称.上映时间.分数 2 ...