1

連鎖代入の背後にある考え方を理解しており、警告が表示されたとき

Pandas: SettingWithCopyWarning

元のデータ フレームではなく、コピーに書き込んでいることを知らせるためです。

しかし、元のデータ フレームに実際に書き込んでいるように、.loc または .ix() または .iloc() を正常に実装できないようです。

「サイズ」列がnullでない場合、値をnullに設定したいと思います。私はもう試した:

import numpy as np
df.loc[df['size'].notnull()].value=np.nan

また、replace 関数をいじってみましたが、役に立ちませんでした (置き換えられる値はすべてゼロであるため、.replace(0, np.nan) の実装も機能します)。

4

1 に答える 1

2

以下の回答は、元の質問に対するものです (OP によって編集される前)。問題のコード行は次のとおりです。

df.loc[df['size'].notnull() & df['value'] == 0].value = np.nan

代わりにこれを試すことを提案しました([]内で値を移動します):

df.loc[df['size'].notnull() & df['value'] == 0, 'value'] = np.nan

編集:

これは、列名が「値」であり、値属性を設定しようとしていないことを前提としています(上記のコメントに記載されているように、これはできません)

したがって、これは次のデータフレームで機能します。たとえば、次のようになります。

d = {'size' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd']),
 'value' : pd.Series([1., 2., 0.], index=['a', 'b', 'd'])}

df = pd.DataFrame(d)
于 2014-10-28T19:44:50.500 に答える