Python 创建函数以重命名dataframe中的列
我的数据框架如下:Python 创建函数以重命名dataframe中的列,python,pandas,function,dataframe,rename,Python,Pandas,Function,Dataframe,Rename,我的数据框架如下: df = pd.DataFrame({'$a':[1,2], '$b': [10,20]}) def rename_column_name(df, old_column, new_column): df = df.rename({'{}'.format(old_column) : '{}'.format(new_column)}, axis=1) return df new_df = rename_column_name(df, '$a' , 'a')
df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
def rename_column_name(df, old_column, new_column):
df = df.rename({'{}'.format(old_column) : '{}'.format(new_column)}, axis=1)
return df
new_df = rename_column_name(df, '$a' , 'a')
new_df = pd.DataFrame({'a':[1,2], '$b': [10,20]})
我尝试创建一个允许动态更改列名的函数,在该函数中我只需输入旧列名和新列名,如下所示:
df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
def rename_column_name(df, old_column, new_column):
df = df.rename({'{}'.format(old_column) : '{}'.format(new_column)}, axis=1)
return df
new_df = rename_column_name(df, '$a' , 'a')
new_df = pd.DataFrame({'a':[1,2], '$b': [10,20]})
仅当我只有以下一个输入时,此功能才适用:
df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
def rename_column_name(df, old_column, new_column):
df = df.rename({'{}'.format(old_column) : '{}'.format(new_column)}, axis=1)
return df
new_df = rename_column_name(df, '$a' , 'a')
new_df = pd.DataFrame({'a':[1,2], '$b': [10,20]})
这给了我这个新的_df,如下所示:
df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
def rename_column_name(df, old_column, new_column):
df = df.rename({'{}'.format(old_column) : '{}'.format(new_column)}, axis=1)
return df
new_df = rename_column_name(df, '$a' , 'a')
new_df = pd.DataFrame({'a':[1,2], '$b': [10,20]})
但是,我想创建一个函数,允许我根据自己的偏好对多个/一个列进行更改:
new_df = rename_column_name(df, ['$a','$b'] , ['a','b'])
并获得新的_df,如下所示
new_df = pd.DataFrame({'a':[1,2], 'b': [10,20]})
那么,如何使我的函数更具动态性,以允许我自由输入多个/一个列名并重命名它们
def rename_column_name(df, old_column, new_column):
if not isinstance(old_column,(list,tuple)):
old_column = [old_column]
if not isinstance(new_column,(list,tuple)):
old_column = [new_column]
df = df.rename({'{}'.format(old) : '{}'.format(new) for old,new in zip(old_column,new_column)}, axis=1)
return df # dang i should have used dict.zip like in the other solution :P
我想。。。虽然我不明白这比打电话容易多少
df.rename(columns={'$a':'a','$b':b})
我想。。。虽然我不明白这比打电话容易多少
df.rename(columns={'$a':'a','$b':b})
您不需要函数,可以使用dict comprehension来实现这一点:
In [265]: old_names = df.columns.tolist()
In [266]: new_names = ['a','b']
In [268]: df = df.rename(columns=dict(zip(old_names, new_names)))
In [269]: df
Out[269]:
a b
0 1 10
1 2 20
OP需要的功能:
In [274]: def rename_column_name(df, old_column_list, new_column_list):
...: df = df.rename(columns=dict(zip(old_column_list, new_column_list)))
...: return df
...:
In [275]: rename_column_name(df,old_names,new_names)
Out[275]:
a b
0 1 10
1 2 20
您需要将列的
列表
传递给此函数。它可以是多列,也可以是单列。这应该可以满足您的需要。您不需要函数,您可以使用dict comprehension
来实现这一点:
In [265]: old_names = df.columns.tolist()
In [266]: new_names = ['a','b']
In [268]: df = df.rename(columns=dict(zip(old_names, new_names)))
In [269]: df
Out[269]:
a b
0 1 10
1 2 20
OP需要的功能:
In [274]: def rename_column_name(df, old_column_list, new_column_list):
...: df = df.rename(columns=dict(zip(old_column_list, new_column_list)))
...: return df
...:
In [275]: rename_column_name(df,old_names,new_names)
Out[275]:
a b
0 1 10
1 2 20
您需要将列的
列表
传递给此函数。它可以是多列,也可以是单列。这应该可以满足您的需要。您可以使用zip函数来实现,其中,
旧列名和新列名应列在列表中
def rename_column_name(df, old_column_names, new_column_names):
//validating the such that all the new names have been passed
if(len(old_column_names) == len(new_column_names)):
df = df.rename(columns=dict(zip(old_column_names, new_column_names)), inplace=True)
return df
要同时处理一列重命名和以列表的形式传递它们,函数将需要进一步的条件,这些条件可以是
def rename_column_name(df, old_column_names, new_column_names):
//validating the such that all the new names have been passed
if(isinstance(old_column_names, list)) and (isinstance(new_column_names, list)):
if(len(old_column_names) == len(new_column_names)):
df = df.rename(columns=dict(zip(old_column_names, new_column_names)), inplace=True)
elif (isinstance(old_column_names, str)) and (isinstance(new_column_names, str)):
df = df.rename(columns={'{}'.format(old_column_names) : '{}'.format(new_column_names)}, inplace=True)
return df
您可以使用zip函数来实现,其中, 旧列名和新列名应列在列表中
def rename_column_name(df, old_column_names, new_column_names):
//validating the such that all the new names have been passed
if(len(old_column_names) == len(new_column_names)):
df = df.rename(columns=dict(zip(old_column_names, new_column_names)), inplace=True)
return df
要同时处理一列重命名和以列表的形式传递它们,函数将需要进一步的条件,这些条件可以是
def rename_column_name(df, old_column_names, new_column_names):
//validating the such that all the new names have been passed
if(isinstance(old_column_names, list)) and (isinstance(new_column_names, list)):
if(len(old_column_names) == len(new_column_names)):
df = df.rename(columns=dict(zip(old_column_names, new_column_names)), inplace=True)
elif (isinstance(old_column_names, str)) and (isinstance(new_column_names, str)):
df = df.rename(columns={'{}'.format(old_column_names) : '{}'.format(new_column_names)}, inplace=True)
return df
为什么不直接调用
df.rename(列={'a':'a','b':'b})
。。。为什么在这里有一个额外的函数?因为我需要一个函数,因为我有多个文件、列名要重命名。这没有意义为什么你需要一个函数来调用,而你必须有数据帧来调用函数。。。然后在那里做一些额外的事情,为什么不直接调用df.rename(columns={'$a':'a','$b':'b'})
。。。为什么在这里有一个额外的函数?因为我需要一个函数,因为我有多个文件、列名要重命名。这没有意义为什么你需要一个函数来调用,而你必须有数据帧来调用函数。。。然后在那里做一些额外的事情,这不会处理他的另一种情况,只有一列被重命名…这不会处理他的另一种情况,只有一列被重命名。。。