2017-04-08 64 views
2

我是python和pandas的新手。我附上了熊猫数据帧的图片,我需要知道如何从最后一列获取数据以及如何重命名最后一列。重命名数据框中的元组列名称

+0

我倒是投了这个问题,如果你提供的实际数据,而不是数据的图片。 – piRSquared

回答

4

您可以使用:

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

或者:

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

这似乎解决方案:

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

是马车。因为重命名后熊猫函数返回奇怪的错误。

对于从最后一列获取数据,可以使用通过iloc选择的位置:

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 

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" 

对于从数据帧提取数据

您可以ü se loc,iloc和ix方法。

禄是使用标签 ILOC是使用索引 IX可以获取使用指数数据和标签

了解禄和ILOC http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection

了解更多关于索引读取数值读取值,选择数据

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)`] 

重命名的最后一列

最好为所有列设置相似的列名称,而不包含括号 - 使您的代码更具可读性和数据牛逼更容易使用:

# access column by name 
df['vehicle_id_reservation_count`] 

这是由一个元组指定的所有列一个简单的换算:

# 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 ='{} _ {}'。format(col [0],col [1])” – Superpronker

+1

@Superpronker采纳了任何元组长度 – miraculixx

1

可以删除最后一列,并用不同的名称重新分配它。
这在技术上不是重命名该列。不过,我觉得它很直观。

使用@ 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 

我怎样才能获取最后一列?

您可以使用iloc

df.iloc[:, -1] 

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

可以重命名列,你解压缩后

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

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

为了将数据帧中的重命名,你可以做一个很大的数的方式。通过iloc[:, :-1]
使用join下降的最后一列

选项1
开始添加的重命名的列:要继续,我已经开始,即取列主题,然后将其重命名上述

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