如何在Python中通过奇偶列更改列名
我有一个相对较大的数据框,有100多列。目前,仅为第一列指定了名称,数据框如下所示:如何在Python中通过奇偶列更改列名,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个相对较大的数据框,有100多列。目前,仅为第一列指定了名称,数据框如下所示: Event 0 1 2 3 4 5 6 7 8 9 10 11 ... 我想重命名这些列,使它们看起来像 Event Name1 Job1 Name2 Job2 Name3 Job3 Name4 Job4 Name5 Job5 Name6 Job6 ... 基本上,对于偶数列,名称将成为Name(number/2+1),对于奇数列,名称将成为Job((number+1)/2+1) 还有一个类似的问题(),我
Event 0 1 2 3 4 5 6 7 8 9 10 11 ...
我想重命名这些列,使它们看起来像
Event Name1 Job1 Name2 Job2 Name3 Job3 Name4 Job4 Name5 Job5 Name6 Job6 ...
基本上,对于偶数列,名称将成为Name(number/2+1),对于奇数列,名称将成为Job((number+1)/2+1)
还有一个类似的问题(),我按照他们的方法首先提取奇数列,然后分配数字,但代码并没有真正起作用
我想知道我该怎么做 这里是另一个例子:
import pandas as pd
a = {}
a["Event"] = [1,2,3]
a[0] = [1,2,3]
a[1] = [1,2,3]
a[2] = [1,2,3]
a[3] = [1,2,3]
a[4] = [1,2,3]
df = pd.DataFrame(a)
name = 1
job = 1
for i in df.keys()[1:]:
if i%2==0:
df = df.rename(columns={i: "Name"+str(name)})
name+=1
else:
df = df.rename(columns={i: "Job"+str(job)})
job+=1
print(df)
事件名称1作业1名称2作业2名称3
0 1 1 1 1 1 1
1 2 2 2 2 2 2
我们必须做三件事:
列的列表
列表创建一个新的列表
列表
分配给我们的数据框的列
:将熊猫作为pd导入
在[2]中:df=pd.DataFrame(列=['Event','0','1','2','3','4','5','6','7','8','9','10','11'])
In[3]:df
出[3]:
空数据帧
列:[事件,0,1,2,3,4,5,6,7,8,9,10,11]
索引:[]
2:
[4]中的num\u cols=len(列表(df))
In[5]:num_cols
Out[5]:13
在[6]中:new_cols=[]
在[7]中:对于范围内的i(num_cols):
…:如果i==0:
…:新列附加(“事件”)
…:如果i%2==0:
…:new_cols.append(f'Job{int(i/2)}'))
…:其他:
…:new_cols.append(f'Name{int((i+1)/2)})
在[8]中:new_cols
出[8]:
[“事件”,
“名称1”,
“工作1”,
“名称2”,
“工作2”,
“名称3”,
“工作3”,
“名称4”,
“工作4”,
“名称5”,
“工作5”,
“名称6”,
“作业6”]
3:
[9]中的:df.columns=新列
In[10]:df
出[10]:
空数据帧
列:[事件、名称1、作业1、名称2、作业2、名称3、作业3、名称4、作业4、名称5、作业5、名称6、作业6]
索引:[]
使用2个listcomp和zip
和from\u iterable
来展平zip
怎么样:
from itertools import chain
num_cols = 20
name = ['Name'+str(i) for i in range(1, num_cols)]
job = ['Job'+str(i) for i in range(1, num_cols )]
df.columns = ['Event'] + list(chain.from_iterable(zip(name, job)))
Out[1918]:
['Event',
'Name1',
'Job1',
'Name2',
'Job2',
'Name3',
'Job3',
'Name4',
'Job4',
'Name5',
'Job5',
'Name6',
'Job6',
'Name7',
'Job7',
'Name8',
'Job8',
'Name9',
'Job9',
'Name10',
'Job10',
'Name11',
'Job11',
'Name12',
'Job12',
'Name13',
'Job13',
'Name14',
'Job14',
'Name15',
'Job15',
'Name16',
'Job16',
'Name17',
'Job17',
'Name18',
'Job18',
'Name19',
'Job19']
请添加您在问题中尝试过的代码,以便人们更容易发现问题。我理解。只是我写的代码真的是一团糟,我真的不认为它会有任何价值……但我会记住这一点,下次我问一个问题:)我真的不认为它会有任何价值,它会有价值,因为1)人们可以看到你已经尝试了一些东西,你不仅仅是要求他们为你写代码。2) 解决这个问题会容易得多。下次我问问题的时候,我会记住的,太好了!这是非常清楚的。这也有助于理解我在阅读类似问题时看到的其他一些答案。非常感谢@陶涵你好,你的问题解决了吗?如果是这样,请随意接受答案。嗨,阿米尔。是的,问题解决了,我投了赞成票,但我的分数太低(15分之前),所以没有显示投票结果……@TaoHan你仍然可以回答。
from itertools import chain
num_cols = 20
name = ['Name'+str(i) for i in range(1, num_cols)]
job = ['Job'+str(i) for i in range(1, num_cols )]
df.columns = ['Event'] + list(chain.from_iterable(zip(name, job)))
Out[1918]:
['Event',
'Name1',
'Job1',
'Name2',
'Job2',
'Name3',
'Job3',
'Name4',
'Job4',
'Name5',
'Job5',
'Name6',
'Job6',
'Name7',
'Job7',
'Name8',
'Job8',
'Name9',
'Job9',
'Name10',
'Job10',
'Name11',
'Job11',
'Name12',
'Job12',
'Name13',
'Job13',
'Name14',
'Job14',
'Name15',
'Job15',
'Name16',
'Job16',
'Name17',
'Job17',
'Name18',
'Job18',
'Name19',
'Job19']