重命名数据框中的元组列名称

问题描述 投票:0回答:4

我是 python 和 pandas 的新手。我附上了一张 pandas 数据框的图片:

Pic

我需要知道如何从最后一列获取数据以及如何重命名最后一列。

python pandas
4个回答
12
投票

您可以使用:

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

或者:

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

看来解决方案:

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

有越野车。因为重命名 pandas 函数后会返回奇怪的错误。

要从最后一列获取数据,可以使用按位置选择

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'

5
投票

从最后一列获取数据

按照其他答案的建议,使用

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)

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

为了在数据框中重命名它,您可以采取多种方法。继续我已经开始的主题,即获取列,然后重命名它:

选项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

0
投票

用于更改列名称

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

用于从数据框中获取数据

您可以使用 loc、iloc 和 ix 方法。

loc 用于使用标签获取值 iloc 用于使用索引获取值 ix 可以使用索引和标签来获取数据

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

了解有关索引和选择数据的更多信息

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

© www.soinside.com 2019 - 2024. All rights reserved.