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

Sow*_*owD 5 python python-3.x pandas

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

jez*_*ael 6

您可以使用:

df = df.rename(columns = {df.columns[-1] : 'newname'})
Run Code Online (Sandbox Code Playgroud)

要么:

df.columns = df.columns[:-1].tolist() + ['new_name']
Run Code Online (Sandbox Code Playgroud)

看来解决方法:

df.columns.values[-1] = 'newname'
Run Code Online (Sandbox Code Playgroud)

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

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

s = df.iloc[:,-1]
Run Code Online (Sandbox Code Playgroud)

并重命名后:

s1 = df['newname']
print (s1)
Run Code Online (Sandbox Code Playgroud)

样品:

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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
s = df['newname']
print (s)
0    7
1    4
2    3
Name: newname, dtype: int64
Run Code Online (Sandbox Code Playgroud)
df.columns.values[-1] = 'newname'
s = df['newname']
print (s)
>KeyError: 'newname'
Run Code Online (Sandbox Code Playgroud)


mir*_*ixx 5

\n

从最后一列获取数据

\n
\n

仅当它确实是最后一列时,按照其他答案的建议检索df.iloc[:,-1]最后一列才可以正常工作。

\n

但是,使用绝对列位置-1并不是一个稳定的解决方案,即如果您添加其他列,您的代码将会崩溃。

\n

稳定、通用的方法

\n

首先,确保所有列名称都是字符串:

\n
# rename columns\ndf.columns = [str(s) for s in df.columns]\n#\xc2\xa0access column by name\ndf['(vehicle_id, reservation_count)']\n
Run Code Online (Sandbox Code Playgroud)\n
\n

重命名最后一列

\n
\n

最好为所有列使用相似的列名称,其中不带括号 - 使您的代码更具可读性并且数据集更易于使用:

\n
# access column by name\ndf['vehicle_id_reservation_count`]\n
Run Code Online (Sandbox Code Playgroud)\n

这是对由元组命名的所有列的直接转换:

\n
# rename columns\ndef rename(col):\n    if isinstance(col, tuple):\n        col = '_'.join(str(c) for c in col)\n    return col\ndf.columns = map(rename, df.columns)\n
Run Code Online (Sandbox Code Playgroud)\n