python 取满足条件的行 详见问题补充

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 取满足条件的行 详见问题补充相关的知识,希望对你有一定的参考价值。

python 取满足条件的行
cat file 数据,要想取出第二列包含“A0”并且第四列大于等于0.5的行
11, A001, 11, 0.3
11, B001, 11, 0.34
11, A002, 11, 0.9
11, B002, 11, 0.57
11, A003, 11, 0.12
............................

只能用python解决

参考技术A for s in open('filename'):#打开文件
ss=s.strip().split(',')

if "A0" in ss[1] and float(ss[3])>=0.5:#条件

print ”这就是你想要的那一行“
参考技术B f = open('t1.dat', 'r')
for line in f:
        fary = line.split(", ")

        if "A0" in fary[1] and float(fary[3]) >= 0.5:
                print line

f.close()

本回答被提问者采纳

R:提取具有NA的行,删除那些满足条件A并取那些满足条件B的平均值

【中文标题】R:提取具有NA的行,删除那些满足条件A并取那些满足条件B的平均值【英文标题】:R: Extract rows with NAs, delete those meeting condition A and take the mean of those meeting condition B 【发布时间】:2021-09-08 01:22:22 【问题描述】:

使用下面的子集,您可以看到前 8 行在 V2、V3、V4、V5、V6 和 V7 中具有 NA,而其余行仅在其中少数中具有 NA。

我想提取从 V2 到 V7 具有 NA 的行并删除它们(条件 A)。然而 对于那些只有几个 NA 的人,我会取该列的平均值并用它替换 NA 以保留一些信息(条件 B)

V1                  V2  V3  V4  V5  V6  V7
2020-12-01 09:15:00 NA  NA  NA  NA  NA  NA
2020-12-01 09:20:00 NA  NA  NA  NA  NA  NA
2020-12-01 09:25:00 NA  NA  NA  NA  NA  NA
2020-12-01 09:30:00 NA  NA  NA  NA  NA  NA
2020-12-01 09:35:00 NA  NA  NA  NA  NA  NA
2020-12-01 09:40:00 NA  NA  NA  NA  NA  NA
2020-12-01 09:45:00 NA  NA  NA  NA  NA  NA
2020-12-01 09:50:00 NA  NA  NA  NA  NA  NA
2020-12-01 17:05:00 NA  1319.48 10685.10    38.36   156.64  612.83
2020-12-01 17:30:00 12068.88    1308.61 NA  38.43   NA  NA

通常,要删除所有带有 NA 的列,我会使用:

dataset <- dataset[complete.cases(dataset),]

并用列 (Vn) 的平均值替换 NA:

dataset$Vn <- ifelse(is.na(dataset$Vn),
                     ave(dataset$Vn, FUN = function(x) mean(x, na.rm = TRUE)),
                     dataset$Vn)

我不确定将两者结合起来的最佳方式。

【问题讨论】:

【参考方案1】:

我们可以使用来自zooacrossna.aggregate 更轻松地做到这一点

library(zoo)
library(dplyr)
df1 %>%
    mutate(across(where(is.numeric), zoo::na.aggregate))

数据

df1 <- structure(list(V1 = c("2020-12-01 09:15:00", "2020-12-01 09:20:00", 
"2020-12-01 09:25:00", "2020-12-01 09:30:00", "2020-12-01 09:35:00", 
"2020-12-01 09:40:00", "2020-12-01 09:45:00", "2020-12-01 09:50:00", 
"2020-12-01 17:05:00", "2020-12-01 17:30:00"), V2 = c(NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 12068.88), V3 = c(NA, NA, NA, NA, 
NA, NA, NA, NA, 1319.48, 1308.61), V4 = c(NA, NA, NA, NA, NA, 
NA, NA, NA, 10685.1, NA), V5 = c(NA, NA, NA, NA, NA, NA, NA, 
NA, 38.36, 38.43), V6 = c(NA, NA, NA, NA, NA, NA, NA, NA, 156.64, 
NA), V7 = c(NA, NA, NA, NA, NA, NA, NA, NA, 612.83, NA)),
  class = "data.frame", row.names = c(NA, 
-10L))

【讨论】:

【参考方案2】:

对于第一个条件,你可以使用 dplyr::filter:

data <- data %>%
filter(!is.na(V2) & !is.na(v3) & ... & !is.na(V7))

对于第二个条件:

data <- data %>%
mutate(V2 = ifelse(is.na(V2), mean(data$V2, na.rm = T),V2),
       V3 = ifelse(is.na(V3), mean(data$V3, na.rm = T),V3),
       ...)

在每个步骤中,... 代表其余列的相同指令。

【讨论】:

嗯,它在我的 R 版本上运行……这很奇怪。尝试 && 而不是 & 那个什么都不做,也没有返回错误……我会继续努力的。谢谢!

以上是关于python 取满足条件的行 详见问题补充的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中对满足某些条件的行进行子集[重复]

如何在 pandas.DataFrame 中插入满足条件的行值

HIVE/Impala 查询:计算满足特定条件的行之间的行数

SQL内容补充

更新满足以下条件的行

如何使不满足特定条件的行不出现在结果中