あるPandasデータフレームの1行の値を別のPandasデータフレームに追加しようとしています。 2つのデータフレームの行数が同じであるため、問題が発生するとは思われませんでした。ただし、エラーは発生しませんが、出力には問題があります。1つのPandasデータフレームから別のPandasデータフレームへの1つの行のコピーが欠損値になる
追加された列の最後の2つの行がnan
の値になり、その行の値の1つがプロセスで省略されます。ここで
は、最初のデータフレーム `DS1である ':
+----+-----------+-------+-----------+------------+--------------------+
| | Unique ID | Zip | Revenue | Population | Revenue_Per_Person |
+----+-----------+-------+-----------+------------+--------------------+
| 1 | 179 | 75208 | 67789037 | 30171 | 2246.827649067 |
| 2 | 186 | 75208 | 62488032 | 30171 | 2071.1289649001 |
| 3 | 180 | 75212 | 107230739 | 24884 | 4309.2243610352 |
| 4 | 182 | 75212 | 81768596 | 24884 | 3285.9908374859 |
| 5 | 181 | 75137 | 93296769 | 18861 | 4946.5441386989 |
| 6 | 183 | 75237 | 79177044 | 17101 | 4629.9657329981 |
| 7 | 187 | 75237 | 60000000 | 17101 | 3508.5667504824 |
| 9 | 185 | 75236 | 76489996 | 15949 | 4795.9117186031 |
| 10 | 189 | 75236 | 55203335 | 15949 | 3461.2411436454 |
| 11 | 188 | 75115 | 57451134 | 48877 | 1175.422673241 |
+----+-----------+-------+-----------+------------+--------------------+
そして第二に、` DS2':ここで
+---+-----------+-------+---------+
| | 0 | 1 | cluster |
+---+-----------+-------+---------+
| 0 | 67789037 | 30171 | 1 |
| 1 | 62488032 | 30171 | 1 |
| 2 | 107230739 | 24884 | 0 |
| 3 | 81768596 | 24884 | 0 |
| 4 | 93296769 | 18861 | 0 |
| 5 | 79177044 | 17101 | 0 |
| 6 | 60000000 | 17101 | 1 |
| 7 | 76489996 | 15949 | 0 |
| 8 | 55203335 | 15949 | 1 |
| 9 | 57451134 | 48877 | 2 |
+---+-----------+-------+---------+
は私の元のコードです:
ds1['Type'] = ds2['cluster']
I上記の行を実行した後にds1の値をチェックすると、ds1
データフレームに以下の値が得られます。
+----+-----------+-------+--------------------+------------+--------------------+------+
| | Unique ID | Zip | Revenue | Population | Revenue_Per_Person | Type |
+----+-----------+-------+--------------------+------------+--------------------+------+
| 1 | 179 | 75208 | 67789037.0 | 30171 | 2246.827649066985 | 1.0 |
| 2 | 186 | 75208 | 62488032.0 | 30171 | 2071.1289649000696 | 0.0 |
| 3 | 180 | 75212 | 107230738.99999999 | 24884 | 4309.2243610352025 | 0.0 |
| 4 | 182 | 75212 | 81768596.0 | 24884 | 3285.9908374859347 | 0.0 |
| 5 | 181 | 75137 | 93296769.0 | 18861 | 4946.544138698902 | 0.0 |
| 6 | 183 | 75237 | 79177044.0 | 17101 | 4629.96573299807 | 1.0 |
| 7 | 187 | 75237 | 60000000.0 | 17101 | 3508.566750482428 | 0.0 |
| 9 | 185 | 75236 | 76489995.99999999 | 15949 | 4795.911718603046 | 2.0 |
| 10 | 189 | 75236 | 55203334.99999999 | 15949 | 3461.241143645369 | nan |
| 11 | 188 | 75115 | 57451133.99999999 | 48877 | 1175.4226732409925 | nan |
+----+-----------+-------+--------------------+------------+--------------------+------+
それは、このコードは次の警告を投げないことに、注意することは興味深いです:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
だから私は別のアプローチを試してみました:同じ警告と同じを生成
ds1['Type'] = ds2.loc[:,'cluster']
1つの欠損値と最後に2つのnan
値を持つデータフレーム結果。
パンダは、固有のデータ・アラインメントを行い
reset_index
できました。同じ長さのデータフレームごとに異なるインデックスがあります。 1つは0であり、もう1つは1から始まります。 –