【问题标题】:Extract dynamic and static columns from dataFrame从dataFrame中提取动态和静态列
【发布时间】:2021-10-07 06:11:36
【问题描述】:

我正在处理一项要求,其中几列是固定的,而几列是动态的。我被困在数据框过滤器部分。

样本数据集:

ZR  ER   WS  TG  2/3 5/3  2/6 5/50

q   r    e   q   f    w    q    e

注意:数字列是动态的(即每个文件中的计数都会改变) 我想过滤列(ZR、ER 和所有数字列)。

我尝试使用 .iloc[],但有没有其他方法可以帮助我提取数据集。

预期格式:

ZR  ER  2/3  5/3  2/6  5/50
q   r   f     w     q   e

【问题讨论】:

  • 在您的示例中,“ER”列出现了 2 次,但输出中只有一个(第一个)
  • 您想要pandaspyspark 的解决方案吗?
  • 两者都适合我

标签: python python-3.x pandas pyspark


【解决方案1】:

如果需要按Index.isin 列出的测试列和数字来测试是否存在数字使用:

m = df.columns.isin(['ZR', 'ER']) | df.columns.str.contains('^\d+/\d+$')
df = df.loc[:, m]

print (df)
  ZR ER 2/3 5/3 2/6 5/50
0  q  r   f   w   q    e

【讨论】:

  • 你是对的。但我在列名中有一些错别字。请您为上述列建议我
  • @Rishav - 答案已编辑。
  • 为我工作。你太棒了。
  • @jezreal,它还在过滤具有字母数字值的列。
  • @Rishav - 答案已编辑。
【解决方案2】:

试试这个:

df[['ZR','ER',23,5,2]]

【讨论】:

  • “注意:数字列是动态的(即每个文件中的计数都会改变)”
【解决方案3】:

你可以使用filter:

out = df.filter(regex=r'^((ZR|ER)$|\d)')
print(out)

# Output:
  ZR ER 2/3 5/3 2/6 5/50
0  q  r   f   w   q    e

更准确的表达方式:

out = df.filter(regex=r'^(ZR|ER|\d+/\d+)$')
print(out)

# Output:
  ZR ER 2/3 5/3 2/6 5/50
0  q  r   f   w   q    e

【讨论】:

  • @Rishav。我更新了我的解决方案
  • @Rishav。如果您查找如下表达式,则表达式可能会更精确:number/number
猜你喜欢
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 2011-02-12
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2013-04-13
相关资源
最近更新 更多