2017-12-29 14 views
1

Striker_Idでグループ化された2つの列とグループ化された 'Striker_Id'に対応する 'Batsman_Scored'の合計を持つ他の列を作成する、Pythonデータフレームを1列分グループ化して他の列の合計を得る方法

例:

Striker_ID Batsman_Scored 
1   0 
2   8 
... 

enter image description here

私はこのball.groupby(['Striker_Id'])['Batsman_Scored'].sum()を試みたが、これは私が得るものです:

Striker_Id 
1  0000040141000010111000001000020000004001010001... 
2  0000000446404106064011111011100012106110621402... 
3  0000121111114060001000101001011010010001041011... 
4  0114110102100100011010000000006010011001111101... 
5  0140016010010040000101111100101000111410011000... 
6  1100100000104141011141001004001211200001110111... 

合計ではなく、すべての数値を加算するだけです。代わりに何がありますか?

+0

これらは整数ではなく_文字列です。 –

+0

なぜ文字列に変換されるのですか?全てのカラムが 'int'です –

+0

あなたのカラムに数値以外のデータがある可能性があります。つまり、' pd.to_numeric'の不足は何も働かないことを意味します。 –

答えて

1

なんらかの理由で、列が文字列として読み込まれました。

df['Batsman_Scored'] = df['Batsman_Scored'].astype(int) 

か - それが動作しない場合は、ロード後に整数に変換する

df = pd.read_csv('file.csv', converters={'Batsman_Scored' : int}) 

あるいは、

df = pd.read_csv('file.csv', converters={'Batsman_Scored' : pd.to_numeric}) 

- CSVからそれらをロードしている間、コンバータを適用してみてください、

df['Batsman_Scored'] = pd.to_numeric(df['Batsman_Scored'], errors='coerce') 

ここで、 EのGROUPBYは動作するはずです -

r = df.groupby('Striker_Id')['Batsman_Scored'].sum() 

自分のデータにアクセスすることなく、私は推測することができます。しかし、ある時点で、あなたのデータには、パンダが変換を実行できないようにする数値以外のデータが含まれているため、これらの列が文字列として保持されているようです。それはあなたが実際にそれをロードし、任意の非数値項目があるかどうかを教えてあげる

df.col.str.isdigit().any() 

ような何かを行うまで、この問題のデータを特定するために少し難しいです。これは整数でしか機能しないことに注意してください。浮動小数点の列はこのようにデバッグできません。あなたのすべてのカラムとそのデータ型のリストを与える

df.dtypes 

-

また、列が破損したデータを持っているもの見てのもう一つの方法は、dtypesを照会することです。これを使用して、解析する必要がある列を特定します。

for c in df.columns[df.dtypes == object]: 
    print(c) 

上記の方法を適用して修正することができます。

+0

これはうまくいったが、なぜそれは起こったのだろうか?また、他の数値フィールドが同じように乱されていないことをどのように知ることができますか? –

+2

@JaskaranSinghPuri私の編集を見ますか?私はあなたのデータなしで推測することができます。 –

関連する問題