我正在尝试使用select语句从日期框架中删除所有行,其中某列中的值不以126.1开头。
我的数据集的一个例子是:
File Date Time RA Dec
ad0147.fits 18-02-13 22:26:01.779 126.109510 27.360011
ad0147.fits 18-02-13 22:26:01.779 126.061077 27.361124
ad0147.fits 18-02-13 22:26:01.779 125.994430 27.363504
我想过滤掉所有不以126.1开头的RA值。
我用过这个:
data2 = data2.drop(data2[str(data2['RA'])[0:5] is not str(126.1)].index)
其中data2是我的数据帧。
它返回错误“KeyError:True”。
我该如何解决这个问题?
答案 0 :(得分:2)
有很多错误:
str(data2['RA'])[0:5] is not str(126.1)
首先,is not
将评估为True
或False
,但您正在尝试创建布尔数组以供选择,因此,这是误导的。其次,您应该从不使用is
来比较str
对象的开头。对于pandas.Series
对象上的这些字符串操作,可以通过.str
访问内置的矢量化方法,它们模仿内置的字符串方法。所以给出:
>>> df
File Date Time RA Dec
0 ad0147.fits 18-02-13 22:26:01.779 126.109510 27.360011
1 ad0147.fits 18-02-13 22:26:01.779 126.061077 27.361124
2 ad0147.fits 18-02-13 22:26:01.779 125.994430 27.363504
>>> df.dtypes
File object
Date object
Time object
RA float64
Dec float64
dtype: object
您可以使用:
>>> df.RA.astype(str).str.startswith('126.1')
0 True
1 False
2 False
Name: RA, dtype: bool
简单地将它与布尔索引结合起来:
>>> df[df.RA.astype(str).str.startswith('126.1')]
File Date Time RA Dec
0 ad0147.fits 18-02-13 22:26:01.779 126.10951 27.360011
答案 1 :(得分:0)
查看任何Pandas系列上可用的.str方法(这是数据框的列是什么)。它支持正则表达式语法。我经常搜索我不想要的东西,然后用〜来否定它。像这样:
df = df[~df.RA.str.contains('126.1')]