Pandas 高效规范化数据框中的列标题
Pandas efficiently normalize column titles in a dataframe
我正在尝试通过自动规范化为一个术语来在数据框中加载时自动读取行。以下代码有效:
import pandas as pd
df=pd.read_csv('Test.csv', encoding = "ISO-8859-1", index_col=0)
firstCol=['FirstName','First Name','Nombre','NameFirst', 'Name', 'Given name', 'given name', 'Name']
df.rename(columns={typo: 'First_Name' for typo in firstCol}, inplace=True)
addressCol=['Residence','Primary Address', 'primary address' ]
df.rename(columns={typo: 'Address' for typo in addressCol}, inplace=True)
computerCol=['Laptop','Desktop', 'server', 'mobile' ]
df.rename(columns={typo: 'Address' for typo in computerCol}, inplace=True)
是否有更有效的循环或重写它以减少冗余的方法?
我能想到的唯一方法是将它减少到一个 df.rename
操作,通过一次性构建一个完整的字典,例如:
replacements = {
'Name': ['FirstName','First Name','Nombre','NameFirst', 'Name', 'Given name', 'given name', 'Name'],
'Address': ['Residence','Primary Address', 'primary address' ],
#...
}
df.rename(columns={el:k for k,v in replacements.iteritems() for el in v}, inplace=True)
所以它 应该 在函数调用开销方面更有效,但我个人认为它具有 dict
个键更易读,这些键是"to" 值,这些值是要替换的 "from"。
我正在尝试通过自动规范化为一个术语来在数据框中加载时自动读取行。以下代码有效:
import pandas as pd
df=pd.read_csv('Test.csv', encoding = "ISO-8859-1", index_col=0)
firstCol=['FirstName','First Name','Nombre','NameFirst', 'Name', 'Given name', 'given name', 'Name']
df.rename(columns={typo: 'First_Name' for typo in firstCol}, inplace=True)
addressCol=['Residence','Primary Address', 'primary address' ]
df.rename(columns={typo: 'Address' for typo in addressCol}, inplace=True)
computerCol=['Laptop','Desktop', 'server', 'mobile' ]
df.rename(columns={typo: 'Address' for typo in computerCol}, inplace=True)
是否有更有效的循环或重写它以减少冗余的方法?
我能想到的唯一方法是将它减少到一个 df.rename
操作,通过一次性构建一个完整的字典,例如:
replacements = {
'Name': ['FirstName','First Name','Nombre','NameFirst', 'Name', 'Given name', 'given name', 'Name'],
'Address': ['Residence','Primary Address', 'primary address' ],
#...
}
df.rename(columns={el:k for k,v in replacements.iteritems() for el in v}, inplace=True)
所以它 应该 在函数调用开销方面更有效,但我个人认为它具有 dict
个键更易读,这些键是"to" 值,这些值是要替换的 "from"。