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

时间:2019-02-20 19:06:35

标签: python pandas

我正在尝试从文本文件中删除行,该文本文件的数据由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:标记数据出错。 C错误:第15行中应该有61个字段,看到64个

我如何编辑它以包括我需要的条件?我对Python非常陌生,这是我什至不熟悉的唯一语言。先感谢您!以下是数据实际外观的示例。

Example of what the contents of the file looks like

1 个答案:

答案 0 :(得分: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是一个字符串数组(熊猫索引)。因此,您正在将字符串与数字进行比较。可以进行以下操作,但可能只会导致您遇到下一个问题。

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