Python 在数据帧上匹配和重命名列
我有两个数据帧: df1: df2: 我已使用下表中的Python 在数据帧上匹配和重命名列,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧: df1: df2: 我已使用下表中的 df1 df2 Drive Drive_1 Volume 2Volume Reps Reps 使用表中的映射,如何将df2中的所有列重命名为与df1相同 我可以使用一个简单的df2=df2.rename(columns={old:new})手动执行此操作。但是我想使用可以处理不同列名的通用代码。也许这会有所帮助 df2.columns = df1.columns 如果要动态创建类似列的映
df1 df2
Drive Drive_1
Volume 2Volume
Reps Reps
使用表中的映射,如何将df2中的所有列重命名为与df1相同
我可以使用一个简单的df2=df2.rename(columns={old:new})手动执行此操作。但是我想使用可以处理不同列名的通用代码。也许这会有所帮助
df2.columns = df1.columns
如果要动态创建类似列的映射dict,可以使用difflib
import difflib
col1 = ['ID', 'Drive','Volume','Rep'] # df1.columns.values
col2 = [ 'ID', '2Volume', 'Drive_1', 'Reps'] # df2.columns.values
col_dict = {difflib.get_close_matches(col, col2)[0]:col for col in col1}
在运行上述代码之后,您将有一个这样的dict-
{'ID': 'ID', 'Drive_1': 'Drive', '2Volume': 'Volume', 'Reps': 'Rep'}
当您说不想做
df2=df2时,可以使用上面的dict映射列。手动重命名(columns={old:new})
,您的意思是要从表
自动提取旧的
和新的
?如果是这样,您可以这样做:
df2=df2.rename(columns=dict(zip(table.df2,table.df1)))
#ID驱动器卷重复
# 0 1 2 3 4
或:
df2=df2.rename(columns=table.set_index('df2').df1)
这将不知道如何匹配列tho。请记住,列可以是任意顺序和任意名称。第一步是映射df1中要分配给哪些列名df2@tjjudge谢谢:)。我更新了我的答案。我喜欢这个概念,但它似乎不起作用。是的,我理解,但出于某种原因。。列名没有改变。虽然没有error@tjjudge嗯,也许在你的真实世界中,在df1
/df2
列名中或者表的值中(或者你是说即使这个示例对你也不起作用)会出现另一个类似于我目前使用的数据集的问题。如果可以的话,请看一下@tdy
import difflib
col1 = ['ID', 'Drive','Volume','Rep'] # df1.columns.values
col2 = [ 'ID', '2Volume', 'Drive_1', 'Reps'] # df2.columns.values
col_dict = {difflib.get_close_matches(col, col2)[0]:col for col in col1}
{'ID': 'ID', 'Drive_1': 'Drive', '2Volume': 'Volume', 'Reps': 'Rep'}