我可以使用applymap更改数据框的变量名称吗?

3
如果我想使用pandas更改数据框中的变量名称,可以使用applymap()而不是pandas.df.rename()函数来更改名称。例如:
Registrar   Enrolment Agency    State   District    Sub District    Pin Code    Gender
Allahabad Bank  Tera Software Ltd   Jharkhand   Ranchi  Namkum  834003  M
Allahabad Bank  Tera Software Ltd   Jharkhand   Ranchi  Ranchi  834004  F
Allahabad Bank  Vakrangee Softwares Limited Gujarat Surat   Nizar   394380  M

我需要用下划线填充上述数据框中变量名称中的空格,并且所有变量名称都应为小写。

4个回答

5

函数 applymap 用于逐个元素地更改 DataFrame 的所有值,因此更改列名字需要使用其他方法。

我认为你需要使用 list comprehension 结合 python str 函数 lowerreplace (如果遇到 NaN 则无法工作):

df.columns = [col.lower().replace(' ', '_') for col in df.columns]
print (df)
        registrar     enrolment_agency            state district sub_district  \
0  Allahabad Bank    Tera Software Ltd        Jharkhand   Ranchi       Namkum   
1  Allahabad Bank    Tera Software Ltd        Jharkhand   Ranchi       Ranchi   
2  Allahabad Bank  Vakrangee Softwares  Limited Gujarat    Surat        Nizar   

   pin_code gender  
0    834003      M  
1    834004      F  
2    394380      M  

或使用 pandas str 函数lowerreplace 解决:

df.columns = df.columns.str.replace(' ', '_').str.lower()
print (df)
        registrar     enrolment_agency            state district sub_district  \
0  Allahabad Bank    Tera Software Ltd        Jharkhand   Ranchi       Namkum   
1  Allahabad Bank    Tera Software Ltd        Jharkhand   Ranchi       Ranchi   
2  Allahabad Bank  Vakrangee Softwares  Limited Gujarat    Surat        Nizar   

   pin_code gender  
0    834003      M  
1    834004      F  
2    394380      M  

编辑:

如果需要通过 applymap 更改列名,这是不可能的,因为该函数未实现对 Index(即列名)的支持。但是,如果确实需要类似的功能,请使用map函数:

df.columns = df.columns.map(lambda col: col.lower().replace(' ', '_'))
print (df)
        registrar     enrolment_agency            state district sub_district  \
0  Allahabad Bank    Tera Software Ltd        Jharkhand   Ranchi       Namkum   
1  Allahabad Bank    Tera Software Ltd        Jharkhand   Ranchi       Ranchi   
2  Allahabad Bank  Vakrangee Softwares  Limited Gujarat    Surat        Nizar   

   pin_code gender  
0    834003      M  
1    834004      F  
2    394380      M  

我不知道df.columns()会给我们一个列名列表。谢谢你提供的信息,我学到了很多!我将使用map()。 - aditya royal matturi

4
你可以用三种方式来实现这一点。
1. 重写列。 2. 使用计算列。 3. 使用视图。
df.columns = [x.lower().replace(' ', '_') for x in df.columns] 

使用字符串方法
df.columns = df.columns.str.lower().str.replace(' ', '_')

使用 rename
df.rename(columns=lambda x: x.lower().replace(' ', '_'))

1

试试这个:

df.applymap(lambda x: str(x).lower().replace(' ', '_'))

applymap()函数将把数据中的空格改为下划线。如果您想在列中进行更改,则可以使用jezrael或John的答案。

enter image description here


我猜OP想要重命名列,但我不能百分之百确定。在OP的问题中,applymap看起来有点误导人。 - MaxU - stand with Ukraine

1
严肃点,选@JohnGalt的答案。使用rename即可。
但是因为我想尝试添加其他答案没有涵盖的内容:
使用split然后join
df.columns = df.columns.str.lower().str.split().str.join('_')
df

enter image description here

分割和连接具有将多个空格替换为下划线_的优点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接