【问题标题】:Iterating through 2 columns of a structured file遍历结构化文件的 2 列
【发布时间】:2019-02-16 15:37:19
【问题描述】:

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

我想要做的是基于 2 个范围(即值 a

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

【问题讨论】:

  • 您能否展示一个虚拟数据集来演示您的需求以及预期的输出?this 可能会有所帮助
  • "x", "b", "c", "d", "12", "30", "d" 是一个示例行,每一行在 " " 中都有不同的值.基本上我想检查集合中的每一行。例如,如果第 5 列的值介于 10 和 15 之间,而第 6 列的值介于 40 和 50 之间,则接受整行并将其移动到新的文件/数据集中。因此,最终输出看起来与原始数据集相同,但只有通过已建立的 2 个参数范围的行。
  • 示例数据集:"X”, “a”, “1”, “15”“Y”, “a”, “12”, “44”“Z”, “a”, “13”, “39”“W”, “a”, “11”, “47” 过滤器:如果第三列值介于 10 和 15 之间,并且第四列值介于 40 和 50 之间,则接受整行。示例输出:“Y”, “a”, “12”, “44”“W”, “a”, “11”, “47”
  • 这也无济于事。你真的应该通过我上面评论中的链接。和this
  • 我不明白在概念上回答这个问题还需要什么。我并不是真的在寻找代码答案。代码中没有错误,因为没有代码。我只是在寻找关于如何根据参数值过滤大型数据集的概念性答案。如果我在错误的论坛中提问,请告诉我。

标签: python pandas filtering gzip


【解决方案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

【讨论】:

  • 啊,好吧,所以通过大型数据集并过滤它的最佳方法是将数据设置为 python 中的 df,然后建立过滤它的条件。我现在也理解了你创建一个合适的例子的意思。对此感到抱歉。
  • @KunalRai 是的,熊猫让操作数据变得更加容易。 :) 你也可以使用read_csv 读取文件并将其存储在数据框帖子中,这样事情会更容易。没问题,这些链接将成为您未来的参考。 ;)
【解决方案2】:

使用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

【讨论】:

  • 可以在查询中使用列表吗?如果我想使用列表的索引值作为 df 列的参数,我可以使用它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2012-09-12
相关资源
最近更新 更多