web-dev-qa-db-ja.com

強制的にpandas .ilocで単一行のデータフレームを返しますか?

プログラミングの目的で、結果のデータフレームに1行しかない場合でも、.ilocが一貫してデータフレームを返すようにします。これを達成する方法は?

現在、.ilocは、結果に1行しかない場合にSeriesを返します。例:

In [1]: df = pd.DataFrame({'a':[1,2], 'b':[3,4]})

In [2]: df
Out[2]:
   a  b
0  1  3
1  2  4

In [3]: type(df.iloc[0, :])
Out[3]: pandas.core.series.Series

この動作は、2つの理由で不十分です。

  • 選択された行の数に応じて、.ilocはシリーズまたはデータフレームを返すことができるため、コードでこれを手動で確認する必要があります

-一方で、.locは、常にデータフレームを返し、pandas自体の一貫性を失わせます (コメントで指摘されているように、間違った情報)

Rユーザーの場合、これはdrop = FALSEを使用するか、デフォルトで常にデータフレームを返すtidyverseのtibbleを使用して実行できます。

19
Heisenberg

二重括弧を使用し、

df.iloc[[0]]

出力:

   a  b
0  1  3

print(type(df.iloc[[0]])

<class 'pandas.core.frame.DataFrame'>

df.iloc[[0],:]の略

35
Scott Boston

行インデックスのスライスを指定します。

df.iloc[0:1]

単一行のデータフレームを返します。

   a  b
0  1  3
3
cs95