我可以使用applymap来更改数据帧的变量名称

时间:2017-01-29 11:07:43

标签: python pandas

如果我想使用pandas更改数据框中的变量名,我可以在不使用pandas.df.rename()函数的情况下更改名称,但使用applymap() 例如

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 个答案:

答案 0 :(得分:3)

函数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列名称,则不可能,因为Indexcolumn names)未实现此功能。但如果真的想要类似的东西使用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  

答案 1 :(得分:3)

你可以用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(' ', '_'))

答案 2 :(得分:1)

试试这个:

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

applymap()会将数据中的空格更改为下划线。如果你想在列中更改它,那么你可以采取以色列或约翰的答案。

enter image description here

答案 3 :(得分:1)

说真的......选择@ JohnGalt的回答。 WHERE是要走的路。

但是因为我想尝试添加其他答案尚未涵盖的内容:

使用rename然后split

join

enter image description here

拆分和加入具有使用下划线df.columns = df.columns.str.lower().str.split().str.join('_') df

替换多个空格的优势