在panda数据帧中快速grep数据最简单的方法是什么?

2024-10-01 02:21:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一个数据帧,可以保存超过一百万个Windows事件日志。你知道吗

其中一列名为data,用于存储我们要为每个事件日志捕获的相关详细信息。例如:

SubjectUserName=myuser, SubjectDomainName=XX, TargetUserName=XXXXX, TargetDomainName=XXXXX

迭代数据帧的列data以使用正则表达式下载整个SubjectUserName列表并将结果存储在数组中的最快方法是什么?你知道吗

我们尝试过传统的迭代方法,比如iterrows(),但是在处理如此大量的数据时,这些方法被证明是相当慢的。你知道吗

提前感谢您的帮助。你知道吗

谨致问候,亚历山大。你知道吗


Tags: 数据方法列表datawindows事件详细信息数组
2条回答

IIUC您可以使用^{}

print (df)
                                                data
0  SubjectUserName=myuser, SubjectDomainName=XX, ...
1  SubjectUserName=myuser, SubjectDomainName=XX, ...

#temporaly display with of one column to 100
with pd.option_context('display.max_colwidth', 100):
    print (df.data)
0    SubjectUserName=myuser, SubjectDomainName=XX, TargetUserName=XXXXX, TargetDomainName=XXXXX
1    SubjectUserName=myuser, SubjectDomainName=XX, TargetUserName=XXXXX, TargetDomainName=XXXXX
Name: data, dtype: object


print (df.data.str.extract('SubjectUserName=(.*), SubjectDomainName', expand=False))
        0
0  myuser
1  myuser

另一种可能的解决方案是使用^{}并按,(默认分隔符)将数据拆分为4列,然后^{}

import pandas as pd
import numpy as np
from pandas.compat import StringIO

temp=u"""SubjectUserName=myuser, SubjectDomainName=XX, TargetUserName=XXXXX, TargetDomainName=XXXXX
SubjectUserName=myuser, SubjectDomainName=XX, TargetUserName=XXXXX, TargetDomainName=XXXXX
"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), skipinitialspace=True, names=['SubjectUserName','SubjectDomainName','TargetUserName','TargetDomainName'])
print (df)
          SubjectUserName     SubjectDomainName        TargetUserName  \
0  SubjectUserName=myuser  SubjectDomainName=XX  TargetUserName=XXXXX   
1  SubjectUserName=myuser  SubjectDomainName=XX  TargetUserName=XXXXX   

         TargetDomainName  
0  TargetDomainName=XXXXX  
1  TargetDomainName=XXXXX 


print (df.SubjectUserName.str.replace('SubjectUserName=', ''))
0    myuser
1    myuser
Name: SubjectUserName, dtype: object

首先,对于大型数据集,熊猫确实需要很多时间来处理,我也经历了同样的阶段。我可以给你一个小把戏,真的帮了我的忙。你知道吗

首先,让数据加载到dataframe。然后创建另一个列列表,选择所有需要的列,并从数据框中创建自己的数据集(Ex-.xls或.csv或.json文件)。您会发现创建的数据集的大小远远小于您使用的原始数据集的大小。原始数据集有许多未使用的信息和内容,这些信息和内容从未被使用过,而且占用的内存比需要的内存大得多。我明白,这不是标准的方法,但它真的帮助了我。 例如:

df.to_csv('df1.csv')

您还可以临时创建选定的列,并为较小的数据集做出更好的选择。示例:

new_cols = ['Name', 'a', 'b', 'c', 'd', 'e']
df.columns = new_cols

这真的帮助了我。我希望它也能帮助你。你知道吗

相关问题 更多 >