我有一个如下所示的数据框
数据帧DF
首先,我必须过滤掉包含以V
开头的名称的列
然后,如果任何行包含负值,则必须检查过滤后的数据帧,并且对于包含负值的行,我必须提高和出错
其次,如果非滤波数据帧(W)包含任何负值,则必须发出警告消息
我使用下面的代码来分隔以V
df1=df.filter(regex='V')
df2=df1[df<0]
请帮助您进一步了解。
答案 0 :(得分:0)
以下是此示例中要处理的一些虚拟数据:
import pandas as pd
import numpy as np
# create dummy data
numbers = np.random.randint(-100, 100, size=(5, 4))
# save as temporary file for timeit
df = pd.DataFrame(numbers, columns=["V1", "V2", "W1", "W2"])
print(df)
V1 V2 W1 W2
0 53 88 36 -33
1 -1 -85 60 -8
2 27 34 -11 61
3 92 54 -76 -37
4 -16 -39 13 -81
基本上,这里需要两个步骤。首先,过滤已为其提供解决方案的相关列。这里只是一个简短的注释,您可以使用like
参数,这个参数在本例中更合适,因为您不需要正则表达式的全部功能。
其次,您需要一个函数来过滤包含零以下任何值的所有行。这正是filter_negatives
函数在下面的功能。特别是,lt(0)
返回True
,所有值低于0 ,any(axis=1)
为所有行索引返回True,其中行中的任何值(axis = 1)为True。
def filter_negatives(sub_df):
bool_series = sub_df.lt(0).any(axis=1)
return sub_df.index[bool_series]
neg_v_rows = filter_negatives(df.filter(like="V"))
neg_w_rows = filter_negatives(df.filter(like="W"))
print(neg_v_rows)
Int64Index([1, 4], dtype='int64')
print(neg_w_rows)
Int64Index([0, 1, 2, 3, 4], dtype='int64')
最后,您可以根据neg_v_rows
或neg_w_rows
提出错误或创建警告。因为我不确定你想如何在这里引发错误或返回警告,所以我暂时跳过这个。在Python中引发错误最终会破坏程序(如果没有捕获),并且上面的虚拟表包含几乎所有行中低于零的值。如果需要,请说明。
要检查您的未过滤数据框是否包含任何负值,您只需使用neg_w_rows.any()
即可。