Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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/pandas中某个范围内的数字重命名列_Python_Python 3.x_Pandas - Fatal编程技术网

使用python/pandas中某个范围内的数字重命名列

使用python/pandas中某个范围内的数字重命名列,python,python-3.x,pandas,Python,Python 3.x,Pandas,我被以下情况困住了。我很确定我错过了一些简单的东西,但我在这里和其他网站上尝试了很多建议,但没有找到我想要的 我有一个数据框架,其中有许多随机命名的列(由提供的csv文件提供)。我想使用range函数中的数字重命名这些列 因为我正在重命名所有列,所以可以直接使用 df.columns = [str(x) for x in range(1,2000)] 但是,假设我可以通过rename()函数来实现吗?也许用lambda?我尝试过许多不同的变体,但我得到了各种各样的错误。 我正在寻找语法,以提供

我被以下情况困住了。我很确定我错过了一些简单的东西,但我在这里和其他网站上尝试了很多建议,但没有找到我想要的

我有一个数据框架,其中有许多随机命名的列(由提供的csv文件提供)。我想使用range函数中的数字重命名这些列

因为我正在重命名所有列,所以可以直接使用

df.columns = [str(x) for x in range(1,2000)]
但是,假设我可以通过rename()函数来实现吗?也许用lambda?我尝试过许多不同的变体,但我得到了各种各样的错误。 我正在寻找语法,以提供

 df.rename(columns= (str(x) for x in range(1,2000)))
其中rename根据给定的范围顺序为列指定名称。 上述方法不起作用。但是有没有办法让它发挥作用呢


谢谢大家!

您可以将
dict
传递给rename的
kwarg:

df.rename(columns={x:y for x,y in zip(df.columns,range(0,len(df.columns)))})
这将需要:

>>> df ID1 ID2 POS1 POS2 TYPE TYPEVAL 1 A 001 1 5 COLOR RED 2 A 001 1 5 WEIGHT 50KG 3 A 001 1 5 HEIGHT 160CM 4 A 002 6 19 FUTURE YES 5 A 002 6 19 PRESENT NO 6 B 001 26 34 COLOUR BLUE 7 B 001 26 34 WEIGHT 85KG 8 B 001 26 34 HEIGHT 120CM 9 C 001 10 13 MOBILE NOKIA 10 C 001 10 13 TABLET ASUS >>>df ID1 ID2 POS1 POS2类型VAL 1 A 001 1 5色红色 2 A 001 1 5重量50KG 3 A 001 1 5高度160厘米 4 A 002 6 19未来是 5 A 002 6 19当前编号 6 B 001 26 34色蓝色 7 B 001 26 34重量85KG 8 B 001 26 34高120厘米 9 C 001 10 13诺基亚手机 10 C 001 10 13片ASUS 给你:

>>> df.rename(columns={x:y for x,y in zip(df.columns,range(0,len(df.columns)))}) 0 1 2 3 4 5 1 A 001 1 5 COLOR RED 2 A 001 1 5 WEIGHT 50KG 3 A 001 1 5 HEIGHT 160CM 4 A 002 6 19 FUTURE YES 5 A 002 6 19 PRESENT NO 6 B 001 26 34 COLOUR BLUE 7 B 001 26 34 WEIGHT 85KG 8 B 001 26 34 HEIGHT 120CM 9 C 001 10 13 MOBILE NOKIA 10 C 001 10 13 TABLET ASUS >>>重命名(列={x:y代表x,y在zip中(df.columns,range(0,len(df.columns)))}) 0 1 2 3 4 5 1 A 001 1 5色红色 2 A 001 1 5重量50KG 3 A 001 1 5高度160厘米 4 A 002 6 19未来是 5 A 002 6 19当前编号 6 B 001 26 34色蓝色 7 B 001 26 34重量85KG 8 B 001 26 34高120厘米 9 C 001 10 13诺基亚手机 10 C 001 10 13片ASUS
如果只想使用数字重命名列,这可能是最简单的方法:

df.columns = np.arange(len(df.columns))
演示:

df = pd.DataFrame({'A':['a', 'b', 'c'], 'B': ['d','e','f'], 'C': ['g','h','i']})
print(df)
   A  B  C
0  a  d  g
1  b  e  h
2  c  f  i
重命名列:

df.columns = np.arange(len(df.columns))
print(df)
   0  1  2
0  a  d  g
1  b  e  h
2  c  f  i

什么样的错误?@Craig这一特殊的尝试给了我TypeError:“generator”对象不可调用@bernie的答案会解决这个问题。
DataFrame.rename()
的文档中说,传递要重命名的列表仅对系列对象有效。我意识到它需要dict,但在找到正确的创建方法时遇到了困难。这太棒了。不过,请为我澄清一些事情。当我在它自己的行(任务)中运行代码时,它会按预期工作。然而,当我在删除前几列之后链接它时,我得到的起始索引是4,而不是0。似乎是在删除列之前进行了此列重命名。但我认为它应该先删除列,然后重命名。谢谢。问题是
zip(…)
df.columns
的值在删除列之前来自原始数据帧。这里有一种不同的方法可能适用于您。删除列后,转置数据帧,创建一个新的数字索引,转置返回,然后将其转换为字符串。看看这个代码是否适合你:
df.drop(…).T.reset_index(drop=True).T.rename(columns=str)
Nice idea,@Craig@Craig,那么(为了将来的参考),不能链接依赖于列/索引名的更改值的调用吗?非常新的问题。另外,你的转置想法非常好,而且是可链接的。除非它仅在整型列名需要以0开头时才起作用。伯尼提供的解决方案更通用。但不可链接…干净简单