遍历结构化文件的2列

时间:2019-02-16 06:37:45

标签: python pandas filtering gzip

我正在尝试解析巨大数据集的一部分。我拥有的数据集部分是一个3GB的gzip文件。该文件的结构使其具有x列和数百万行。这些列用逗号或某种常见的运算符分隔,因此我可以读取文件。

我要基于2个范围(即值a

我所缺少的是如何处理这样的迭代的基本理解。在使用pandas read_csv函数过滤数据集后,我正在努力处理集合。我认为我应该使用数据帧来访问所需的数据,但不确定。

2 个答案:

答案 0 :(得分:1)

IIUC,创建一个最小的可重复示例:

from io import StringIO 
data = StringIO("""X, a, 1, 15
Y, a, 12, 44
Z, a, 13, 39
W, a, 11, 47""")
df=pd.read_csv(data,header=None)
df.columns=['A','B','C','D']
print(df)

  A   B   C   D
0  X   a   1  15
1  Y   a  12  44
2  Z   a  13  39
3  W   a  11  47

现在使用series.between()df.loc[]的过滤器:

cond1 = df['C'].between(10,15) #check if C betwen 10,15
cond2 = df['D'].between(40,50) #check if D between 40 and 50
df_new=df.loc[cond1&cond2] #pull data where both condition matches and place in new_df
print(df_new)

   A   B   C   D
1  Y   a  12  44
3  W   a  11  47

如果愿意使用sql查询(仅用于实验):):

import pandasql as ps
ps.sqldf('select * from df where df.C between 10 and 15 and df.D between 40 and 50')

   A   B   C   D
0  Y   a  12  44
1  W   a  11  47

答案 1 :(得分:1)

使用DataFrame.query进行过滤的解决方案:

#anky_91 dataset
df1 = df.query('10 < C < 15 & 40 < D < 50 ')
print (df1)
   A  B   C   D
1  Y  a  12  44
3  W  a  11  47