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

问题描述 投票:1回答:1

我试图从文本文件中删除行,该文件包含23列和至少6000行的数据。我想删除第14列中值大于41.54的所有行,但仅当第13列中的值大于49.97时才会删除。这样,而不是删除列13中值大于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:错误标记数据。 C错误:第15行预计61个字段,见64

我怎么编辑这个以包括我需要的条件?我是Python的新手,它是我甚至模糊不清的唯一语言。先感谢您!下面是数据实际外观的示例。

Example of what the contents of the file looks like

python pandas
1个回答
3
投票

文本不整齐,因此您收到此错误。看起来数据从第23行开始,所以:

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

skiprows听起来像是这样,在阅读之前跳过所有行。编辑:您也可以使用comment跳过以#开头的行

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

编辑:在尝试我的建议后,你表示这可以让你加载数据,但你在下一行df = df[df.columns[13] > 41.54]遇到问题

简单的答案是df.columns是一个字符串的数组(pandas索引)。所以你要比较一个字符串和一个数字。以下可以工作,但它可以引导您到下一个问题。

df = df[df[df.columns[13]] > 41.54]

例如,如果该列中的任何值无法与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

© www.soinside.com 2019 - 2024. All rights reserved.