Python 删除框架中具有其他形状的行

Python 删除框架中具有其他形状的行,python,pandas,Python,Pandas,我试图删除pandas数据框中“MEL”列中形状不是99、13的行 path MEL word 0 8d37d10e7f97ddea2eca9d39a4cf821b4457b041.wav [[-10.160675, -13.804866, 0.9188097, 4.415375,... one 1 9a8f761be3fa0d0a963f5612ba73e68cc0ad11ba.wav [[-10.482644, -13.339122, -3.4994812,

我试图删除pandas数据框中“MEL”列中形状不是99、13的行

path    MEL  word
0   8d37d10e7f97ddea2eca9d39a4cf821b4457b041.wav    [[-10.160675, -13.804866, 0.9188097, 4.415375,...   one
1   9a8f761be3fa0d0a963f5612ba73e68cc0ad11ba.wav    [[-10.482644, -13.339122, -3.4994812, -5.29343...   one
2   314cdc39f628bc68d216498b2080bcc7a549a45f.wav    [[-11.076196, -13.980294, -17.289637, -41.0668...   one
3   cc499e63eee4a3bcca48b5b452df04990df83570.wav    [[-13.830213, -12.64104, -3.7780707, -10.76490...   one
4   38cdcc4d9432ce4a2fe63e0998dbca91e64b954a.wav    [[-11.967776, -23.27864, -10.3656, -8.786977, ...   one
我尝试了以下方法:

indexNames = merged[ merged['MEL'].shape != (99,13) ].index
merged.drop(indexNames , inplace=True)
然而,第一行代码给了我一个关键错误:True。有人知道如何做到这一点吗?

条件

 merged['MEL'].shape != (99,13)
计算结果为True或False

请注意,您可以使用与数据帧索引长度相同的布尔向量从数据帧中选择行,例如,从数据帧的一列派生的内容。详情如下:

编辑:这段代码可能会有帮助

 # generate sample dataset
    df = pd.DataFrame(data = {'col1': [np.random.rand(3,2),np.random.rand(5,2),np.random.rand(7,8),np.random.rand(5,2)], 
                              'col2': ['b','a','b','q'],
                              'col3': ['c','c','c','q'],
                              'col4': ['d','d','d','q'], 
                              'col5': ['e','e','a','q'] })

    for index in df.index:
        if df.loc[index]['col1'].shape !=(5,2):
            df.drop(index , inplace=True)
EDIT2:没有循环:

df = pd.DataFrame(data = {'col1': [np.random.rand(3,2),np.random.rand(5,2),np.random.rand(7,8),np.random.rand(5,2)], 
                          'col2': ['b','a','b','q'],
                          'col3': ['c','c','c','q'],
                          'col4': ['d','d','d','q'], 
                          'col5': ['e','e','a','q'] })
df['shapes'] = [x.shape for x in df.col1.values]
df = df[df['shapes']!=(5,2)].drop('shapes', axis = 1)

。。。换句话说,您需要列“MEL”具有形状99、13的所有行。我愿意

my_desired_df = merged[merged['MEL'].shape == (99,13)]

你们需要得到一系列的形状

df['MEL'].apply(lambda x: x.shape)
然后你可以通过测试得到一个布尔级数

df['MEL'].apply(lambda x: x.shape) == (93,3)
new_df = df.loc[df['MEL'].apply(lambda x: x.shape) == (93,3), :]
然后用布尔级数进行索引

df['MEL'].apply(lambda x: x.shape) == (93,3)
new_df = df.loc[df['MEL'].apply(lambda x: x.shape) == (93,3), :]
这将为您提供与您的形状相匹配的一切。这样做可能比使用df.drop更容易,但您可以使用

correct = df['MEL'].apply(lambda x: x.shape) == (93,3)
new_df = df.drop(correct[~correct].index)

好吧,所以我不可能在这里做什么?当我把它转换成np数组时,有没有办法?或者创建一个包含所有值true和false的新列,并从中删除行?说实话,我对您想要的输出有点困惑。也许你的数据框的一个样本会有所帮助。将它添加到问题中!MEL列包含形状为99,13的数组,但也包含形状为其他形状的数组。我正在尝试删除所有具有99,13以外其他形状的行。