Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.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 如果满足条件,则重命名dataframe中的列_Python_Pandas_Dataframe_Rename - Fatal编程技术网

Python 如果满足条件,则重命名dataframe中的列

Python 如果满足条件,则重命名dataframe中的列,python,pandas,dataframe,rename,Python,Pandas,Dataframe,Rename,我试图弄清楚,如果满足某些条件,是否可以重命名列标题。我有一个数据框: import pandas as pd data = [[1,'Joe', '2018', 5,7,9]] df = pd.DataFrame(data, columns = ['ID', 'Name', 'Year', 'FallScore', 'WinterScore', 'SpringScore']) print(df) ID Name Year FallScore WinterScore Spri

我试图弄清楚,如果满足某些条件,是否可以重命名列标题。我有一个数据框:

import pandas as pd

data = [[1,'Joe', '2018', 5,7,9]]

df = pd.DataFrame(data, columns = ['ID', 'Name', 'Year', 'FallScore', 'WinterScore', 'SpringScore'])

print(df)
   ID Name  Year  FallScore  WinterScore  SpringScore
0   1  Joe  2018          5            7            9
我想做的是,如果列中包含“Fall”、“Winter”或“Spring”,则在列标题的末尾添加字符串“NEW”。下面是所需输出的样子

df_desired = pd.DataFrame(data, columns = ['ID', 'Name', 'Year', 'FallScoreNEW', 'WinterScoreNEW', 'SpringScoreNEW'])

print(df_desired)
   ID Name  Year  FallScoreNEW  WinterScoreNEW  SpringScoreNEW
0   1  Joe  2018             5               7               9
我能够为每个术语获得一个布尔值数组,但还无法找到如何替换列标题(如果找到“Fall”、“Winter”或“Spring”)。请注意,我不知道实际的列标题,我只知道它们将包含“秋”、“冬”或“春”

我获取布尔值数组的方法如下:

df.columns.str.contains('Fall')
df.columns.str.contains('Winter')
df.columns.str.contains('Spring')

任何帮助都将不胜感激

您可以将
重命名
与lambda一起使用:

df.rename(lambda x: x + 'NEW' if any(k in x for k in keys) else x, axis=1)

   ID Name  Year  FallScoreNEW  WinterScoreNEW  SpringScoreNEW
0   1  Joe  2018             5               7               9

如果您不希望仅为重命名操作返回数据副本,那么这也可以作为列表理解

df.columns = [x + 'NEW' if any(k in x for k in keys) else x for x in df]
df

   ID Name  Year  FallScoreNEW  WinterScoreNEW  SpringScoreNEW
0   1  Joe  2018             5               7               9

非常感谢。正是我想要的!!这里,keys指的是字符串列表,每个字符串都是一个季节。