如何过滤空的 DataFrame 并仍然保留该 DataFrame 的列?

Hen*_*son -10 python pandas

这里有一个例子说明为什么大熊猫是一个可怕的 设计的 一起破解库:

import pandas as pd

df = pd.DataFrame()
df['A'] = [1,2,3]
df['B'] = [4,5,6]
print(df)

df1 = df[df.A.apply(lambda x:x == 4)]
df2 = df1[df1.B.apply(lambda x:x == 1)]
print(df2)
Run Code Online (Sandbox Code Playgroud)

这将打印

df
   A  B
0  1  4
1  2  5
2  3  6
df2
Empty DataFrame
Columns: []
Index: []
Run Code Online (Sandbox Code Playgroud)

注意 how Columns: [],这意味着进一步/选择 ondf2将失败。这是一个大问题,因为这意味着我现在必须在尝试从中进行选择之前始终检查任何表是否为空,这是垃圾行为。

为清楚起见,明智的、深思熟虑的、合理的、未完全破坏的行为是保留列。

任何人都愿意提供一些我可以在数据帧 API 的 hack 集合之上应用的 hack 吗?

WeN*_*Ben 5

Pandas 几乎考虑了我们需要的所有情况,尤其是那些简单的情况

PS:熊猫没什么问题

df1 = df.loc[df.A.apply(lambda x:x == 4)]
df2 = df1.loc[df1.B.apply(lambda x:x == 1)]
df1
Out[53]: 
Empty DataFrame
Columns: [A, B]
Index: []
df2
Out[54]: 
Empty DataFrame
Columns: [A, B]
Index: []
Run Code Online (Sandbox Code Playgroud)

  • 这是我想到的答案。使用 `[]` 进行布尔选择让我们陷入了列切片与行切片的歧义(我不想详细说明)。使用`.loc` 使我们的目标明确(我们甚至不需要`,:`)。 (2认同)