これらのコードでは、In [15]: df4['t']=2
はdf3
には適用されませんでした。これは私が望むものではありません。私はそれに気づい、列アクションがあまりにもdf3
にapplyedこと加えるのではなく、単にdf4
に適用される。(ただしdf4['t']=2
がTという名前の列を追加しますが、私を混同行を追加しませんでした)パンダ:スーパーセットのサブセットからスーパーセットに列を追加するにはどうすればよいですか?
を加えて欲しいですヒントA value is trying to be set on a copy of a slice from a DataFrame
。
この問題を解決するにはどんな考えですか?
In [6]: df2 =pandas. DataFrame(np.random.randn(10, 5))
In [7]: df2
Out[7]:
0 1 2 3 4
0 0.222512 -0.907183 0.516238 -1.307885 1.604694
1 -0.648315 0.024165 0.487837 -0.374203 -0.193131
2 0.961563 1.847492 -1.773695 -0.791906 -0.458998
3 0.550847 2.221003 0.197836 -1.260352 0.794854
4 -0.211655 0.555512 0.832657 -0.703831 -0.586403
5 -0.384389 1.622995 -0.858065 -0.455278 -1.354076
6 -0.331782 1.256876 -1.080412 1.425681 0.017413
7 -1.008093 0.914414 2.023874 -0.004319 0.733349
8 -0.038734 -0.771304 -0.644371 -0.492886 2.111187
9 -2.812306 -1.434702 -0.074720 1.413066 -0.160265
In [8]: df3=df2
In [9]: df3
Out[9]:
0 1 2 3 4
0 0.222512 -0.907183 0.516238 -1.307885 1.604694
1 -0.648315 0.024165 0.487837 -0.374203 -0.193131
2 0.961563 1.847492 -1.773695 -0.791906 -0.458998
3 0.550847 2.221003 0.197836 -1.260352 0.794854
4 -0.211655 0.555512 0.832657 -0.703831 -0.586403
5 -0.384389 1.622995 -0.858065 -0.455278 -1.354076
6 -0.331782 1.256876 -1.080412 1.425681 0.017413
7 -1.008093 0.914414 2.023874 -0.004319 0.733349
8 -0.038734 -0.771304 -0.644371 -0.492886 2.111187
9 -2.812306 -1.434702 -0.074720 1.413066 -0.160265
In [10]: df3['d']=1
In [11]: df3
Out[11]:
0 1 2 3 4 d
0 0.222512 -0.907183 0.516238 -1.307885 1.604694 1
1 -0.648315 0.024165 0.487837 -0.374203 -0.193131 1
2 0.961563 1.847492 -1.773695 -0.791906 -0.458998 1
3 0.550847 2.221003 0.197836 -1.260352 0.794854 1
4 -0.211655 0.555512 0.832657 -0.703831 -0.586403 1
5 -0.384389 1.622995 -0.858065 -0.455278 -1.354076 1
6 -0.331782 1.256876 -1.080412 1.425681 0.017413 1
7 -1.008093 0.914414 2.023874 -0.004319 0.733349 1
8 -0.038734 -0.771304 -0.644371 -0.492886 2.111187 1
9 -2.812306 -1.434702 -0.074720 1.413066 -0.160265 1
In [12]: df2
Out[12]:
0 1 2 3 4 d
0 0.222512 -0.907183 0.516238 -1.307885 1.604694 1
1 -0.648315 0.024165 0.487837 -0.374203 -0.193131 1
2 0.961563 1.847492 -1.773695 -0.791906 -0.458998 1
3 0.550847 2.221003 0.197836 -1.260352 0.794854 1
4 -0.211655 0.555512 0.832657 -0.703831 -0.586403 1
5 -0.384389 1.622995 -0.858065 -0.455278 -1.354076 1
6 -0.331782 1.256876 -1.080412 1.425681 0.017413 1
7 -1.008093 0.914414 2.023874 -0.004319 0.733349 1
8 -0.038734 -0.771304 -0.644371 -0.492886 2.111187 1
9 -2.812306 -1.434702 -0.074720 1.413066 -0.160265 1
In [13]: df4=df3.loc[:,'d']
In [14]: df4
Out[14]:
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
Name: d, dtype: int64
In [15]: df4['t']=2
C:\Users\jiahao\AppData\Local\Programs\Python\Python35\Scripts\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 [16]: df4
Out[16]:
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
t 2
Name: d, dtype: int64
In [17]: df3
Out[17]:
0 1 2 3 4 d
0 0.222512 -0.907183 0.516238 -1.307885 1.604694 1
1 -0.648315 0.024165 0.487837 -0.374203 -0.193131 1
2 0.961563 1.847492 -1.773695 -0.791906 -0.458998 1
3 0.550847 2.221003 0.197836 -1.260352 0.794854 1
4 -0.211655 0.555512 0.832657 -0.703831 -0.586403 1
5 -0.384389 1.622995 -0.858065 -0.455278 -1.354076 1
6 -0.331782 1.256876 -1.080412 1.425681 0.017413 1
7 -1.008093 0.914414 2.023874 -0.004319 0.733349 1
8 -0.038734 -0.771304 -0.644371 -0.492886 2.111187 1
9 -2.812306 -1.434702 -0.074720 1.413066 -0.160265 1
In [18]:
したがって、データフレームの一部に「ポインタ」を作る方法はありません。データフレームの一部を変更する必要がある場合は、原点を直接変更する必要があります。 – guo
これは非常に奇妙なことですし、コピーして警告を出して動作しない設定を生成します。 –