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 ...
随机推荐
- NPOI 导入Excel和读取Excel
1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...
- 远程连接MongoDB报“Network is unreachable”错误的解决方法
解决办法:/etc/mongod.conf 里把127.0.0.1 改成 0.0.0.0
- Tp5.1使用导出Excel
composer require phpoffice/phpexcel 不管它的警告,都能用的. use PHPExcel; use PHPExcel_IOFactory; public static ...
- C# txt文件的读取与写入
C#创建记事本方法一://创建对象 FileStream stream = new FileStream(@"d:\aa.txt",FileMode.Create);//fileM ...
- long long 与__int64
//为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数 //结果VC中还是认为是32位的,显然不合适 //typedef signed long int ...
- python 修改excel
操作描述:需要实现数据不断写入的功能,首先,在固定位置建立一个空白的xls文件:其次,每次产生的数据先判断该xls已有几列数据,后缀上去. 具体过程: 要保证具有三个包,是xlrd,xlwt,xlut ...
- wow 滚动动画
1.demo <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=" ...
- 学习笔记53—Wilcoxon检验和Mann-whitney检验的区别
Wilcoxon signed-rank test应用于两个related samples Mann–Whitney U test也叫Wilcoxon rank-sum test,应用于两个indep ...
- Inception Network
1. 下图为一个Inception 模块,即将输入的图像通过多种过滤器或者池化操作后,全部再给拼起来形成新的图像. 2. Inception 网络就是讲将多个Inception模块连起来而已,如下图的 ...
- 大数据新手之路二:安装Flume
Ubuntu16.04+Flume1.8.0 1.下载apache-flume-1.8.0-bin.tar.gz http://flume.apache.org/download.html 2.解压到 ...