以下是数据框(csv):
Time Longitude Latitude SSHA
11/22/2013 8:57 -123.603607 81.377536 0.348
11/22/2013 8:57 -124.017502 81.387791 0.386
11/22/2013 8:57 -124.432344 81.397611 0.383
11/22/2013 8:57 -124.848099 81.406995 0.405
11/22/2013 8:57 -125.264724 81.415942 --
... ... ... ...
我想消除经度小于0且大于40的所有行。但是,当我输入脚本时,它不起作用。
import pandas as pd
import numpy
df =pd.read_csv(r"C:\\Users\\chz08006\\Documents\\Results1\\BlockIsland25Test.csv")
indexNames=df[(df['Longitude'] <= 0) & (df['Longitude']>=40)].index
df.drop(indexNames,inplace=True)
df
如果我只是输入
indexNames=df[(df['Longitude'] <= 0)].index
df.drop(indexNames,inplace=True)
df
它工作正常。但是,当我添加& (df['Longitude']>=40)
时,数据框没有任何变化!我什至没有收到错误。
答案 0 :(得分:0)
据我所知,除非有一种优雅的方法,否则这不会帮助您。
只是一个示例数据集:
>>> import pandas as pd
>>> import numpy as np
>>> df
col1 col2
0 123 A
1 123 A
2 456 B
3 456 A
4 -12 C
5 41 D
因此,如果您甚至使用np.bitwise_and
运算符进行测试,都可以看到布尔返回False。因此,这将无济于事...
>>> np.bitwise_and(df.col1 <= 0, df.col1 >= 40)
0 False
1 False
2 False
3 False
4 False
5 False
Name: col1, dtype: bool
>>> df[np.bitwise_and(df.col1 <= 0, df.col1 >= 40)]
Empty DataFrame
Columns: [col1, col2]
Index: []
只有以下解决方法可以解决此问题,直到您找到完美的方法为止。
>>> df.drop(df.loc[df['col1'] <=0].index, inplace=True)
>>> df.drop(df.loc[df['col1'] >= 123].index, inplace=True)
>>> df
col1 col2
5 41 D
希望,这会有所帮助。
答案 1 :(得分:0)
如@Joseph Crispell所述,这里的主要问题是x<=0 & x>=40
将始终返回False。因此,当实例化indexNames时,它为空,因此没有要删除的索引。
正如@Erfran指出的那样,使用df[(df['Longitude'] <= 0) |(df['Longitude']>=40)]
可能会更容易。
但是不清楚您是要说|还是要查找0到40(含)之间的值,在这种情况下,代码看起来像是:df[(0 <= df['Longitude'] <= 40)]