1

label入力データフレームを取り込み、それらをグループ化して合計する バージョンを出力する関数を単純に持つ次のコードがあります。

import pandas as pd
import random
import numpy as np

random.seed = 10

input_data = np.array(
[
[random.randint(0,9) for x in range(4)]+['g'],
[random.randint(0,9) for x in range(4)]+['g'],
[random.randint(0,9) for x in range(4)]+['a'],
[random.randint(0,9) for x in range(4)]+['b'],
[random.randint(0,9) for x in range(4)]+['b']
]
)

input_df = pd.DataFrame(data=input_data, columns=['A','B', 'C', 'D', 'label'])

def group_and_sum(input_df):
    final_df = pd.DataFrame()
    for gr,subdf in input_df.groupby('label'):
        new_df = pd.DataFrame()

        new_df['label'] = [gr]
        columns = [x for x in input_df.columns if x!='label']
        subdf[columns] = subdf[columns].values.astype(float)
        for col in columns:
            new_df[col] = [sum(subdf[col].values)]

        new_df['sum'] = sum([new_df[x].values for x in columns])
        final_df = pd.concat([final_df, new_df])
    final_df.index = np.array(range(len(final_df)))
    return final_df

final_df = group_and_sum(input_df)

次の警告がスローされます。

Warning (from warnings module):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas-0.17.0-py2.7-macosx-10.6-intel.egg/pandas/core/frame.py", line 2269
    self.ix._setitem_with_indexer((slice(None), indexer), value)
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

2つのこと:

1)ここ で警告を確認すると、私には関係ないようです。chained-indexing警告で提供されているリンクが示すように、私は何もしていません。

2)関数の外でエラーを再現しようとすると、何らかの理由でできません:

input_df[['A']]=input_df[['A']].astype(float)
input_df[['A','B']]=input_df[['A','B']].astype(float)

...どちらも問題なく動作します。

この警告を再現する別の方法はありますか?ここで適用されますか? ありがとう。

4

1 に答える 1