【发布时间】:2017-04-08 04:05:32
【问题描述】:
我是 python 和 pandas 的新手。我附上了一张熊猫数据框的图片, 我需要知道如何从最后一列获取数据以及如何重命名最后一列。
【问题讨论】:
-
如果你提供的是实际数据而不是数据图片,我会投票赞成这个问题。
标签: python python-3.x pandas
我是 python 和 pandas 的新手。我附上了一张熊猫数据框的图片, 我需要知道如何从最后一列获取数据以及如何重命名最后一列。
【问题讨论】:
标签: python python-3.x pandas
你可以使用:
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'
【讨论】:
从最后一列获取数据
按照其他答案的建议,使用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)
【讨论】:
您可以删除最后一列并重新分配一个不同的名称。
从技术上讲,这并不是在重命名该列。但是,我认为它很直观。
使用@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
【讨论】:
用于更改列名
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
了解有关索引和选择数据的更多信息
【讨论】:
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) ?