我正在尝试从文本文件中删除行,该文本文件的数据由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非常陌生,这是我什至不熟悉的唯一语言。先感谢您!以下是数据实际外观的示例。
答案 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。