我有一个熊猫数据框,看起来像这样(但实际上要大得多):
a b c d e f g h i j
0| 0 1 2 3 4 -500 -500 5 6 7
1| 2 3 4 5 6 -500 -500 6 5 4
2|-500 -500 -500 -500 -500 -500 -500 -500 -500 -500
3| 3 4 5 2 1 -500 -500 5 3 6
我只想删除包含-500(2)和整列(f和g)的整行。我的数据框是自动生成的,我还不知道哪些列和行包含-500。
有人知道怎么做吗?
谢谢
这里有一种NumPy方法,专门针对使用NumPy.ix\uuUcode>的开放
1D
阵列高效执行的跨维度选择-
def delete_rows_cols(df):
a = df.values
mask = a!=-500
m0 = mask.any(0)
m1 = mask.any(1)
return pd.DataFrame(a[np.ix_(m1,m0)], df.index[m1], df.columns[m0])
样品运行-
In [255]: df
Out[255]:
a b c d e f g h i j
0 0 1 2 3 4 -500 -500 5 6 7
1 2 3 4 5 6 -500 -500 6 5 4
2 -500 -500 -500 -500 -500 -500 -500 -500 -500 -500
3 3 4 5 2 1 -500 -500 5 3 6
In [256]: delete_rows_cols(df)
Out[256]:
a b c d e h i j
0 0 1 2 3 4 5 6 7
1 2 3 4 5 6 6 5 4
3 3 4 5 2 1 5 3 6
运行时测试-
# Setup input dataframe
In [257]: arr = np.random.randint(0,100,(1000,1000))
In [258]: arr[:,np.random.choice(1000,100,replace=0)] = -500
In [259]: arr[np.random.choice(1000,100,replace=0)] = -500
In [260]: df = pd.DataFrame(arr)
# @MaxU's pandas soln step-1
In [262]: mask = df.ne(-500)
In [263]: %timeit df.ne(-500)
1000 loops, best of 3: 606 µs per loop
# @MaxU's pandas soln step-2
In [264]: %timeit df.loc[mask.any(1), mask.any()]
10 loops, best of 3: 21.1 ms per loop
In [261]: %timeit delete_rows_cols(df)
100 loops, best of 3: 3.75 ms per loop
In [76]: mask = df.eq(-500)
In [77]: df.loc[~mask.all(1), ~mask.all()]
Out[77]:
a b c d e h i j
0 0 1 2 3 4 5 6 7
1 2 3 4 5 6 6 5 4
3 3 4 5 2 1 5 3 6
或
In [83]: mask = df.ne(-500)
In [85]: df = df.loc[mask.any(1), mask.any()]
In [86]: df
Out[86]:
a b c d e h i j
0 0 1 2 3 4 5 6 7
1 2 3 4 5 6 6 5 4
3 3 4 5 2 1 5 3 6
下面是掩码
的样子:
In [87]: mask
Out[87]:
a b c d e f g h i j
0 True True True True True False False True True True
1 True True True True True False False True True True
2 False False False False False False False False False False
3 True True True True True False False True True True
嘿嘿,我有以下数据框: 我想删除所有行,这些行的in col1值为2或smaler,因此看起来像: 我该怎么做?非常感谢。
我在python中有一个非常大的数据帧,我想把所有具有特定字符串的行放到特定列中。 例如,我想删除所有在数据帧的C列中有字符串“XYZ”作为子字符串的行。 这可以通过使用有效的方式实现。drop()方法?
假设我有一个相当大的数据集,其形式如下: 我想做的是只根据第一、第三和第四列的值删除重复的行。 在Python中,这可以通过使用指定列来实现。如何在Spark/PySpark中实现相同的功能?
如何消除罗恩说了一句我不想说的话?我有这个数据框: 我正试图删除带有“esponja”字样的rown 我想要这样的数据帧: 我是新手,我不知道如何解决这个问题
问题内容: 这个问题已经在这里有了答案 : 在熊猫中的DataFrame上搜索“不包含” (6个答案) 去年关闭。 我在python中有一个非常大的数据框,我想在特定列中删除所有具有特定字符串的行。 例如,我想在数据框的列C中删除所有具有字符串“ XYZ”作为子字符串的行。 可以使用.drop()方法以一种有效的方式来实现吗? 问题答案: pandas具有向量化的字符串操作,因此您可以过滤掉包含不
我有一个熊猫数据框,看起来像这样。 我想确定猫和蝙蝠是重复的相同值,因此想删除一条记录,只保留第一条记录。所得到的数据帧应该只具有。