Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中通过奇偶列更改列名_Python_Python 3.x_Pandas - Fatal编程技术网

如何在Python中通过奇偶列更改列名

如何在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) 还有一个类似的问题(),我

我有一个相对较大的数据框,有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)

还有一个类似的问题(),我按照他们的方法首先提取奇数列,然后分配数字,但代码并没有真正起作用


我想知道我该怎么做

这里是另一个例子:

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
我们必须做三件事:

  • 获取当前
    列的
    列表
  • 使用从步骤1获得的
    列表创建一个新的
    列表
  • 将新的
    列表
    分配给我们的
    数据框的
  • 1:

    [1]中的
    :将熊猫作为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']