[解決済み] 指定した列の最初の行の値を取得する
質問
これはとんでもなく簡単な質問のようですが...私が期待していたような簡単な答えは見当たりません。
では、Pandasで与えられた列のn行目の値を取得するにはどうすればよいのでしょうか?(私は特に最初の行に興味がありますが、より一般的なプラクティスにも興味があります).
例えば、1.2という値を引き出すには
Btime
を変数として使用します。
正しい方法は何ですか?
>>> df_test
ATime X Y Z Btime C D E
0 1.2 2 15 2 1.2 12 25 12
1 1.4 3 12 1 1.3 13 22 11
2 1.5 1 10 6 1.4 11 20 16
3 1.6 2 9 10 1.7 12 29 12
4 1.9 1 1 9 1.9 11 21 19
5 2.0 0 0 0 2.0 8 10 11
6 2.4 0 0 0 2.4 10 12 15
解決方法は?
を選択するには
ith
の行になります。
使用
iloc
:
In [31]: df_test.iloc[0]
Out[31]:
ATime 1.2
X 2.0
Y 15.0
Z 2.0
Btime 1.2
C 12.0
D 25.0
E 12.0
Name: 0, dtype: float64
でi番目の値を選択する。
Btime
列を使用することができます。
In [30]: df_test['Btime'].iloc[0]
Out[30]: 1.2
という違いがあります。
df_test['Btime'].iloc[0]
(推奨)と
df_test.iloc[0]['Btime']
:
DataFrameは、列ベースのブロックにデータを格納します(各ブロックは単一の
d型)。最初に列で選択すると
ビュー
を返すことができます(これは
コピーを返すよりも早く、元のdtypeが維持されます。これに対して
まず行で選択し、DataFrameが異なる列を持つ場合
dtypes を使用する場合、Pandas
コピー
のデータをオブジェクト型の新しい系列に変換します。そのため
列の選択は行の選択より少し速いです。したがって
df_test.iloc[0]['Btime']
が動作します。
df_test['Btime'].iloc[0]
は少し
より効率的です。
割り当てに関しては、両者には大きな違いがあります。
df_test['Btime'].iloc[0] = x
影響を与える
df_test
しかし
df_test.iloc[0]['Btime']
はできません。その理由については、以下をご覧ください。 というのも、微妙な違いで
インデックス付けの順番は、動作に大きな違いをもたらすので、単一のインデックス付けを使用するのがよいでしょう。
df.iloc[0, df.columns.get_loc('Btime')] = x
df.iloc[0, df.columns.get_loc('Btime')] = x
(推奨)です。
は 推奨方法 に新しい値を割り当てることができます。 DataFrameは 連鎖的なインデックスを回避する を使用し、代わりにメソッド が示すように アンドリュー ,
df.loc[df.index[n], 'Btime'] = x
または
df.iloc[n, df.columns.get_loc('Btime')] = x
後者の方法の方が少し速いです。
df.loc
は、行と列のラベルを
の位置インデックスを使用すると、変換の必要性が少し減ります。
df.iloc
の代わりに
df['Btime'].iloc[0] = x
は動作しますが、推奨されません。
これは動作しますが、DataFrameの仕組みを利用したものです。
現在
が実装されています。Pandasが将来的にこのように動作しなければならないという保証はありません。特に、(現在)
df['Btime']
は常に
ビュー(コピーではありません)なので
df['Btime'].iloc[n] = x
を使用することができます。
割り当てる
新しい値
のn番目の場所にある
Btime
列の
df
.
Pandasはインデクサがビューを返すかコピーを返すかを明示的に保証していないので、連鎖インデックスを使用した代入は一般的に常に
SettingWithCopyWarning
この場合、代入が成功し
df
:
In [22]: df = pd.DataFrame({'foo':list('ABC')}, index=[0,2,1])
In [24]: df['bar'] = 100
In [25]: df['bar'].iloc[0] = 99
/home/unutbu/data/binky/bin/ipython:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
self._setitem_with_indexer(indexer, value)
In [26]: df
Out[26]:
foo bar
0 A 99 <-- assignment succeeded
2 B 100
1 C 100
df.iloc[0]['Btime'] = x
は動作しません。
これに対して
df.iloc[0]['bar'] = 123
は機能しません。
df.iloc[0]
はコピーを返します。
In [66]: df.iloc[0]['bar'] = 123
/home/unutbu/data/binky/bin/ipython:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
In [67]: df
Out[67]:
foo bar
0 A 99 <-- assignment failed
2 B 100
1 C 100
注意事項
: 以前、私が提案した
df_test.ix[i, 'Btime']
. しかし、これでは
ith
の値は
ix
でインデックスを作成しようとします。
ラベル
でインデックスを作ろうとする前に
位置
. したがって、もしDataFrameが0から始まるソート順でない整数のインデックスを持つ場合、次のように使用します。
ix[i]
は行を返します。
ラベル付き
i
よりも、むしろ
ith
の行になります。例えば
In [1]: df = pd.DataFrame({'foo':list('ABC')}, index=[0,2,1])
In [2]: df
Out[2]:
foo
0 A
2 B
1 C
In [4]: df.ix[1, 'foo']
Out[4]: 'C'
関連
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] PandasでDataFrameの行を列の値に基づいて削除する
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Pythonによるjieba分割ライブラリ
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】pandas loc vs. iloc vs. at vs. iat?