Pandas 重命名列
Pandas Rename Columns
我正在尝试使用前一个列名称重命名我的列,并在末尾添加一个数字,以使这些列唯一。有办法实现吗?
当前DF:
Reconnaissance Unnamed: 1 Resource Development Unnamed: 3 Initial Access Unnamed: 5
Active Scanning Scanning IP Blocks Acquire Infrastructure Botnet Drive-by Compromise NaN
期望:
Reconnaissance Reconnaissance_1 Resource Development Resource Development_1 Initial Access Initial Access_1
Active Scanning Scanning IP Blocks Acquire Infrastructure Botnet Drive-by Compromise NaN
如果每隔一列需要重命名,您可以使用:
df = df.rename(columns = {df.columns[i]: f"{df.columns[i-1]}_1" for i in range(1, len(df.columns),2)})
您可以从列创建系列(因为 Index
对象没有 ffill
方法,这在这里很有用)。然后确定哪些列以 Unnamed
开头,屏蔽它们并使用 cumcount 找出要添加到末尾的数字(在可能有多个连续的 Unnamed: 列的情况下)并使用 ffill
获得不以 'Unnamed' 开头的前一列标签。使用此系列分配列。
示例数据
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['Reconnaissance', 'Unnamed: 1', 'Resource Development',
'Unnamed: 3', 'Initial Access', 'Unnamed: 5'],
data=1, index=[0])
代码
s = pd.Series(df.columns)
s = s.mask(s.str.startswith('Unnamed:'))
s = (s.ffill()
+ s.groupby(s.notnull().cumsum()).cumcount().astype(str).radd('_').replace('_0', ''))
df.columns = s
print(df)
Reconnaissance Reconnaissance_1 Resource Development Resource Development_1 Initial Access Initial Access_1
0 1 1 1 1 1 1
这是另一个示例,展示了它在 'Unnamed:' 列间距较小的情况下的表现。
df = pd.DataFrame(columns=['a', 'Unnamed: 1', 'Unnamed: 2', 'b', 'c', 'Unnamed: 3'],
data=[np.arange(6)], index=[0])
#### Same code as above
print(df)
a a_1 a_2 b c c_1
0 0 1 2 3 4 5
要一次重命名所有列,您可以执行以下操作:
df.columns = [col1, col2, col3]
我正在尝试使用前一个列名称重命名我的列,并在末尾添加一个数字,以使这些列唯一。有办法实现吗?
当前DF:
Reconnaissance Unnamed: 1 Resource Development Unnamed: 3 Initial Access Unnamed: 5
Active Scanning Scanning IP Blocks Acquire Infrastructure Botnet Drive-by Compromise NaN
期望:
Reconnaissance Reconnaissance_1 Resource Development Resource Development_1 Initial Access Initial Access_1
Active Scanning Scanning IP Blocks Acquire Infrastructure Botnet Drive-by Compromise NaN
如果每隔一列需要重命名,您可以使用:
df = df.rename(columns = {df.columns[i]: f"{df.columns[i-1]}_1" for i in range(1, len(df.columns),2)})
您可以从列创建系列(因为 Index
对象没有 ffill
方法,这在这里很有用)。然后确定哪些列以 Unnamed
开头,屏蔽它们并使用 cumcount 找出要添加到末尾的数字(在可能有多个连续的 Unnamed: 列的情况下)并使用 ffill
获得不以 'Unnamed' 开头的前一列标签。使用此系列分配列。
示例数据
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['Reconnaissance', 'Unnamed: 1', 'Resource Development',
'Unnamed: 3', 'Initial Access', 'Unnamed: 5'],
data=1, index=[0])
代码
s = pd.Series(df.columns)
s = s.mask(s.str.startswith('Unnamed:'))
s = (s.ffill()
+ s.groupby(s.notnull().cumsum()).cumcount().astype(str).radd('_').replace('_0', ''))
df.columns = s
print(df)
Reconnaissance Reconnaissance_1 Resource Development Resource Development_1 Initial Access Initial Access_1
0 1 1 1 1 1 1
这是另一个示例,展示了它在 'Unnamed:' 列间距较小的情况下的表现。
df = pd.DataFrame(columns=['a', 'Unnamed: 1', 'Unnamed: 2', 'b', 'c', 'Unnamed: 3'],
data=[np.arange(6)], index=[0])
#### Same code as above
print(df)
a a_1 a_2 b c c_1
0 0 1 2 3 4 5
要一次重命名所有列,您可以执行以下操作:
df.columns = [col1, col2, col3]