从列中删除值时的Pandas KeyError

时间:2018-11-04 15:10:13

标签: python pandas

我是Python的初学者,尝试从pandas数据框中的列中删除值时遇到错误。一段时间后,我一直收到Keyerror。这是代码段:

for i in data['FilePath'].keys():
if '.' not in data['FilePath'][i]:
    value = data['FilePath'][i]
    data = data[data['FilePath'] != value]

我不断在“ if'。”行附近收到Keyerror。不在data ['FilePath'] [i]“中。请帮助我解决此错误

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的逻辑,那么您应该能够做到无循环。据我所知,如果FilePath列不是以.开头,则好像要删除行。如果正确,那么下面是执行此操作的一种方法:

使用nested list

创建示例数据
d = [
    ['BytesAccessed','FilePath','DateTime'],
    [0, '/lib/x86_64-linux-gnu/libtinfo.so.5 832.0', '[28/Jun/2018:11:53:09]'], 
    [1, './lib/x86-linux-gnu/yourtext.so.6 932.0', '[28/Jun/2018:11:53:09]'],
    [2, '/lib/x86_64-linux-gnu/mytes0', '[28/Jun/2018:11:53:09]'],
    ]
data = pd.DataFrame(d[1:], columns=d[0])
print(data)

   BytesAccessed                                   FilePath                DateTime
0              0  /lib/x86_64-linux-gnu/libtinfo.so.5 832.0  [28/Jun/2018:11:53:09]
1              1    ./lib/x86-linux-gnu/yourtext.so.6 932.0  [28/Jun/2018:11:53:09]
2              2               /lib/x86_64-linux-gnu/mytes0  [28/Jun/2018:11:53:09]

过滤数据以删除.列中不包含FilePath at any location的行

data_filtered = (data.set_index('FilePath')
                    .filter(like='.', axis=0)
                    .reset_index())[data.columns]
print(data_filtered)

   BytesAccessed                                   FilePath                DateTime
0              0  /lib/x86_64-linux-gnu/libtinfo.so.5 832.0  [28/Jun/2018:11:53:09]
1              1    ./lib/x86-linux-gnu/yourtext.so.6 932.0  [28/Jun/2018:11:53:09]