2017-04-08 12 views
2

私はpythonとpandasを初めて使用しています。私はパンダのデータフレームの画像を添付しました Pic 私は最後の列からデータをフェッチする方法と最後の列の名前を変更する方法を知る必要があります。データフレーム内のタプル列名の名前を変更

を使用でき
+0

を保存することができます。 – piRSquared

答えて

4

df = df.rename(columns = {df.columns[-1] : 'newname'}) 

または:

df.columns = df.columns[:-1].tolist() + ['new_name'] 

それは解決策と思われる:

df.columns.values[-1] = 'newname' 

はバグがあります。名前を変更した後、pandas関数が奇妙なエラーを返すためです。

s = df.iloc[:,-1] 

して名前を変更した後:

s1 = df['newname'] 
print (s1) 

サンプル:

df = pd.DataFrame({'R':[7,8,9], 
        'T':[1,3,5], 
        'E':[5,3,6], 
        ('Z', 'a'):[7,4,3]}) 

print (df) 
    E T R (Z, a) 
0 5 1 7  7 
1 3 3 8  4 
2 6 5 9  3 

s = df.iloc[:,-1] 
print (s) 
0 7 
1 4 
2 3 
Name: (Z, a), dtype: int64 

df.columns = df.columns[:-1].tolist() + ['new_name'] 
print (df) 
    E T R new_name 
0 5 1 7   7 
1 3 3 8   4 
2 6 5 9   3 
012を最後の列からデータを取得するために

は、可能な使用がilocによって位置によって選択されます


df = df.rename(columns = {('Z', 'a') : 'newname'}) 
print (df) 
    E T R newname 
0 5 1 7  7 
1 3 3 8  4 
2 6 5 9  3 
s = df['newname'] 
print (s) 
0 7 
1 4 
2 3 
Name: newname, dtype: int64 
df.columns.values[-1] = 'newname' 
s = df['newname'] 
print (s) 
>KeyError: 'newname' 
+0

たくさんのオプション...良い答え+1 :-) – piRSquared

+0

良い、ちょうどあなたがそれを見ることを確認して:-)。私は常にあなたの良心に投票してほしい。あなたがやる。私はあなたが私がそれを完全に尊重していることを願っています。この場合、私はそれが私の考え方を表すので、解決策が好きです。私はそれをそのまま残します。そしてうまくいけば、すぐにもっと多くの疑問が見えます。 – piRSquared

0

データフレームからデータを取得するために、列名

columns=df.columns.values 
columns[-1]="Column name" 

をchangeingため

あなたはuのできse loc、iloc、およびixメソッド。

LOCは ILOCはIXは両方使用して索引を使用してデータをフェッチし、

http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection

はインデックス詳細については、こちらをご覧くださいLOCとILOCについて学ぶラベルを付けることができインデックス を使用して値をフェッチするためにあるラベルを使用して値を取得するためのものであり、データ選択

http://pandas.pydata.org/pandas-docs/stable/indexing.html

+0

うん、私はあなたのソリューションをテストし、それは奇妙なkeyerrorを返す - 私の答えの底を参照してください。どのようにあなたのために働くのですか? 'df = pd。DataFrame({'R':[7,8,9]、 'T':[1,3,5]、 'E':[5,3,6]、 ( 'Z'、 'a' ):[7,4,3]}) print(df) 'と' df.columns.values [-1] = 'newname'' 's = df [' newname ']' 'print(s) ) '? – jezrael

+0

表示目的でのみ列名を変更したいと考えました。誤解して申し訳ありません。 @jezraelは適切な解決策を与えました。 –

1

最後の列からデータを取得する

最後の列がdf.iloc[:,-1]であることを示唆しているように、最後の列が実際に最後の列である場合にのみ正常に動作します。

-1のような絶対的な列の位置を使用することは安定した解決策ではありません。つまり、他の列を追加すると、コードが破損します。

# rename columns 
df.columns = [str(s) for s in df.columns] 
# access column by name 
df['(vehicle_id, reservation_count)`] 

は、最後の列

の名前を変更することが好ましい。

安定した、一般的なアプローチすべての

まず、すべてのカラム名が文字列であることを確認してくださいすべての列に括弧を入れずに同様の列名を持つようにする - コードを読みやすくしてdataseを作成する使いトンより簡単に:あなたは最後の列を削除し、別の名前で再割り当てすることができ

# rename columns 
def rename(col): 
    if isinstance(col, tuple): 
     col = '_'.join(str(c) for c in col) 
    return col 
df.columns = map(rename, df.columns) 
+0

タプルが文字列と浮動小数点数の混在の場合は、次のようにしてください: "col = '{} _ {}'。フォーマット(col [0]、col [1])" – Superpronker

+1

@Superpronkerは、長さ – miraculixx

1

# access column by name 
df['vehicle_id_reservation_count`] 

これはタプルによって命名されているすべての列にまっすぐ進むの変換です。
これは技術的に列の名前を変更するものではありません。しかし、私はそれが直感的だと思います。 jezraelのセットアップ

df = pd.DataFrame({'R':[7,8,9], 
        'T':[1,3,5], 
        'E':[5,3,6], 
        ('Z', 'a'):[7,4,3]}) 

print(df) 

    R T E (Z, a) 
0 7 1 5  7 
1 8 3 3  4 
2 9 5 6  3 

どのように私は最後の列を取得することができます@使用

あなたはあなたがデータフレームの中にその名前を変更するためには

df.iloc[:, -1].rename('newcolumn') 

0 5 
1 3 
2 6 
Name: newcolumn, dtype: int64 

それを抽出した後、あなたは多くを行うことができます列の名前を変更することができますiloc

df.iloc[:, -1] 

0 5 
1 3 
2 6 
Name: c, dtype: int64 

を使用することができます方法の。私は列をフェッチする、すなわち、始めましたテーマを続行するには、それをリネーム:

オプション1
開始をiloc[:, :-1]
使用joinと最後の列をドロップすることによって名前を変更列を追加します

df.iloc[:, :-1].join(df.iloc[:, -1].rename('newcolumn')) 

    R T E newname 
0 7 1 5  7 
1 8 3 3  4 
2 9 5 6  3 

オプション2
上で参照それとも私たちはあなたの代わりにデータの画像の実際のデータを提供した場合、私はこの質問票をいただきたい戻ってそれを置くためにassignを使用してrename

df.iloc[:, :-1].assign(newname=df.iloc[:, -1]) 

    R T E newname 
0 7 1 5  7 
1 8 3 3  4 
2 9 5 6  3 
関連する問題