2017-02-06 14 views
2

私はパンダのデータフレームにpd.pivot_tableを使用している、と列名が('A1', 'B1'), ('A1', 'B2')...のようなタプルになり、私は df.columns.values[i] = df.columns.values[i][0] + '_' + df6.columns.values[i][1], を使用しようとしただけでなく名前を変更しようとした彼らは'A1_B1', 'A1_B2'...列名をタプルから文字列に変更するにはどうすればよいですか?

のようになりたいです。

df.columns.valuesをチェックすると、列の名前は変更されましたが、これらの名前を使用してインデックスを作成することはできません。私はPythonには新しいので、列名と列インデックスの違いを知らないかもしれません。

誰でも手伝ってもらえますか?ありがとう!

+0

は、あなたが得ている整数を四捨五入して指定することで、フロートになっていた(と迷惑な「0.0" 、小数点を付加されて)整数があったという事実を扱いますエラーか、何もしていないのですか? – user2896976

答えて

5

セットアップ

df = pd.DataFrame(
    np.arange(8).reshape(2, 4), 
    columns=[('A1', 'B1'), ('A2', 'B1'), ('A1', 'B2'), ('A2', 'B2')]) 

print(df) 

    (A1, B1) (A2, B1) (A1, B2) (A2, B2) 
0   0   1   2   3 
1   4   5   6   7 

rename

df.rename(columns='_'.join, inplace=True) 
print(df) 

    A1_B1 A2_B1 A1_B2 A2_B2 
0  0  1  2  3 
1  4  5  6  7 

map

df.columns = df.columns.map('_'.join) 
print(df) 

    A1_B1 A2_B1 A1_B2 A2_B2 
0  0  1  2  3 
1  4  5  6  7 
1

あなたはこのためにdf.DataFrame.Index.mapを使用することができます。

df1.columns.map(lambda t: t[0] + "_" + t[1]) 
1

あなたが反復する必要があるかもしれません。

final=[] 
for x in df.columns.values: 
    final.append(x[0]+'_'+x[1]) 
df.columns.values = final 
2

使用list comprehension

df.columns = ['{}_{}'.format(x[0], x[1]) for x in df.columns] 
print(df) 
    A1_B1 A2_B1 A1_B2 A2_B2 
0  0  1  2  3 
1  4  5  6  7 

または:

df.columns = ['_'.join(x) for x in df.columns] 
print(df) 
    A1_B1 A2_B1 A1_B2 A2_B2 
0  0  1  2  3 
1  4  5  6  7 
0

私はこのアプローチを使用:

mydic = dict() 
for i,var in enumerate(df.columns): 
    if isinstance(var, tuple): 
     mydic[var] = '{}_{}'.format(var[0], var[1]) 
df.rename(columns = mydic) 

これは私トンことができますOも私のタプルの第二の入力ではなく

mydic[var] = '{}_{:d}'.format(var[0], round(var[1])) 
関連する問題