Python:如何根据大于条件在两个不同的列中删除文本文件中的数据行?

2024-04-19 01:42:30 发布

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

我试图从一个文本文件中删除行,该文件包含23列和至少6000行的数据。我想删除第14列中值大于41.54的所有行,但仅当第13列中的值也大于49.97时。这样就不会删除column13中值大于41.54的所有行,而是只删除同时满足这两个条件的行。在

我将包括我刚开始时在第14列中只删除值大于41.54的行的内容。列没有名称。在

import pandas as pd
data = pd.read_csv('F625W8.txt', sep=" ", header=None)
df = df[df.columns[13] > 41.54]

但这给了我一个错误:ParserError:error标记数据。C错误:第15行应该有61个字段,saw 64

如何编辑此项以包括我需要的条件?我对Python非常陌生,而且它是我唯一一种模糊熟悉的语言。提前谢谢你!下面是数据的实际外观示例。在

Example of what the contents of the file looks like


Tags: 文件数据import名称内容pandasdfread
1条回答
网友
1楼 · 发布于 2024-04-19 01:42:30

文本不整齐,因此会出现此错误。数据似乎从第23行开始,因此:

^{1}$

skiprows就像它听起来一样,在读取参数之前跳过所有行。Edit:您还可以使用comment跳过以#开头的行

也可以使用error_bad_lines参数来删除字段太多的行,或者使用warn_bad_lines对警告执行相同的操作。skipfooter跳过底部的行,nrows限制要读取的行数。最后,usecols可以限制要读取的列。通过混合和匹配这些参数的使用,您可以对从文件中读取的数据进行细粒度控制。在

编辑:在尝试了我的建议之后,您指出这允许您加载数据,但是您在处理下一行df = df[df.columns[13] > 41.54]

简单的答案是df.columns是一个字符串数组(pandas index)。所以你要把一个字符串和一个数字进行比较。下面的方法可行,但它可能会导致下一个问题。在

^{pr2}$

例如,如果不能将该列中的任何值与float进行比较,则会得到相同的错误。在

import pandas as pd
df = pd.DataFrame({"d": [4, 5, 6, 7, 8, 9,], "x": [4,5,6,7,8,"nine"]})

df = df[df["x"] > 7] # TypeError: '>' not supported...
df = df[df["d"] > 7] # Runs fine

在本例中,您需要转换为具有这些字符串值的内容,可能需要使用Series.apply,您可以查看here。在

相关问题 更多 >