从具有数据框的列表中删除空数据框

时间:2020-09-26 11:17:44

标签: python pandas dataframe loops

这是数据帧的列表。

import pandas as pd
data=[pd.DataFrame([1,2,3],columns=['a']),pd.DataFrame([]),pd.DataFrame([]),
pd.DataFrame([3,4,5,6,7],columns=['a'])]

我正在尝试从上面包含数据帧的列表中删除空数据帧。

这是我尝试过的:

for i in data:
    del i.empty()
data   

给出:

File "<ipython-input-33-d07b32efe793>", line 2
    del i.empty()
        ^ SyntaxError: cannot delete function call

重要:它还需要将它们存储在data变量中

3 个答案:

答案 0 :(得分:2)

尝试一下:

import pandas as pd

data = [pd.DataFrame([1, 2, 3], columns=['a']), pd.DataFrame([]),
        pd.DataFrame([]),
        pd.DataFrame([3, 4, 5, 6, 7], columns=['a'])]

for i in range(len(data)-1, 0, -1):
    if data[i].empty:
        del data[i]

print(data)

您的代码存在问题,即df.empty返回True或False,而如果i返回True,则要删除项目i.empty()

请注意,为了避免出现列表项out of range错误,我们在该范围内使用了反向范围。

答案 1 :(得分:0)

我们可以使用filter

data = list(filter(lambda df: not df.empty, data))

列表理解

data = [df for df in data if not df.empty]

print(data)

[   a
0  1
1  2
2  3,    a
0  3
1  4
2  5
3  6
4  7]

答案 2 :(得分:-1)

您可以这样做:

[i for i in data if len(i)>0]

输出:

[   a
0  1
1  2
2  3,    a
0  3
1  4
2  5
3  6
4  7]