Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—数据帧列在';之后以大写字母重命名';_Python_Pandas - Fatal编程技术网

Python—数据帧列在';之后以大写字母重命名';

Python—数据帧列在';之后以大写字母重命名';,python,pandas,Python,Pandas,我有一些列遵循“abc.def”模式,我正试图用一个函数将其更改为“abcDef”。我可以使用df.rename(columns={'abc.def':'abcDef'},inplace=True)来实现这一点,但我正在寻找一种更通用的方法,可以应用于不同的数据帧。我这样做是为了简单的字符串,我不知道如何将它应用于列名。我曾尝试将列名添加到列表中,并将函数附加到列表中,但也没有成功 我的df是: import pandas as pd import re

我有一些列遵循“abc.def”模式,我正试图用一个函数将其更改为“abcDef”。我可以使用
df.rename(columns={'abc.def':'abcDef'},inplace=True)
来实现这一点,但我正在寻找一种更通用的方法,可以应用于不同的数据帧。我这样做是为了简单的字符串,我不知道如何将它应用于列名。我曾尝试将列名添加到列表中,并将函数附加到列表中,但也没有成功

我的df是:

import pandas as pd
import re
            
            
data = {'end.date': ['01/10/2020 15:23', '01/10/2020 16:31', '01/10/2020 16:20', '01/10/2020 11:00'],
                  'start.date': ['01/10/2020 13:38', '01/10/2020 14:49', '01/10/2020 14:30','01/10/2020 14:30']
                  }
            
df = pd.DataFrame(data, columns = ['end.Date','start.date'])

# below is my go at the text.             
text = 'abs.d'
splitFilter = re.compile('([.!?]\s*)')
splitColumnName = splitFilter.split(text)
print(splitColumnName)
        
final = ''.join([i.capitalize() for i in splitColumnName])
final = final.replace('.', '')
print(final)

您可以使用代码将单个字符串转换为函数,然后将此函数应用于每个列名,例如,使用列表理解:

def camelCase(文本):
splitFilter=re.compile(“([.!?]\s*)”
splitColumnName=splitFilter.split(文本)
final=''.join([i.capitalize()表示splitColumnName中的i])
最终=最终。替换('.','')
返回决赛
df.columns=[camelCase(col)表示df.columns中的col]

请注意,当前您的代码也将第一个字母大写。

我想您想要类似的东西吗

import pandas as pd
import re
            
            
data = {'end.date': ['01/10/2020 15:23', '01/10/2020 16:31', '01/10/2020 16:20', '01/10/2020 11:00'],
                  'start.date': ['01/10/2020 13:38', '01/10/2020 14:49', '01/10/2020 14:30','01/10/2020 14:30']
                  }
            
df = pd.DataFrame(data, columns = ['end.Date','start.date'])

# below is my go at the text.   
def formatColumn(column) :
  splitFilter = re.compile('([.!?]\s*)')
  splitColumnName = splitFilter.split(column)
          
  final = ''.join([i.capitalize() for i in splitColumnName])
  final = final.replace('.', '')
  return final[0].lower() + final[1:] 

df.rename(columns=dict(zip(df.columns, [formatColumn(c) for c in df.columns])))

我使用了@Arne和@LeMorse的答案并编译了我需要的内容。再次感谢

import pandas as pd
import re
            
            
data = {'end.date': ['01/10/2020 15:23', '01/10/2020 16:31', '01/10/2020 16:20', '01/10/2020 11:00'],
                  'start.date': ['01/10/2020 13:38', '01/10/2020 14:49', '01/10/2020 14:30','01/10/2020 14:30']
                  }
            
df = pd.DataFrame(data, columns = ['end.Date','start.date'])

# below is my go at the text.   
def formatColumn(column) :
  splitFilter = re.compile('([.!?]\s*)')
  splitColumnName = splitFilter.split(column)
          
  final = ''.join([i.capitalize() for i in splitColumnName])
  final = final.replace('.', '')
  return final[0].lower() + final[1:] 

df.columns = [formatColumn(col) for col in df.columns]
这几乎与其他答案相似,但在分离信号方面更为通用,并用注释清楚地解释了过程。
如果您还需要更多关于代码的评论,请告诉我

欢迎使用SO!你可以通过一些解释来改进你的答案。他的代码不正确,因为它没有做正确的事情,例如abc.def而不是生成abcDef。他的代码正在生成abcDef,而你做了同样的事情,所以你的答案不正确correct@Doodle在声称我的回答不正确之前,你应该先阅读我的回答。然后你可能会发现它指出了你正在抱怨的事情。问题不是“请为我写一个完整的解决方案”,这会违反SO规则,而是更具体地说,如何将转换应用于所有列名。
def splitAndRenameColumns(df, splitSignal):
 # get all the columns in a list
 columnNameList = df.columns.values.tolist()
 # create a map to rename columns
 # mapping is old.columnname : newColumnname
 newColNames = {}
 # loop pver all column names
 for clm in columnNameList :
    # split the column names on "provided split signal i.e dot in this case"
    tempStore = clm.split(splitSignal)
    # store the first word before dot in temparory string  
    newString = tempStore[0]
    # loop over all other string values we got after splitting  
    for index in range(1,len(tempStore)):
        # capitalise first character to upper case and concatenate all the strings 
        newString += tempStore[index][0].upper()+tempStore[index][1:]
    # create the mapping 
    # i.e {'end.Date.gate': 'endDateGate', 'start.date.bate': 'startDateBate'}
    newColNames[clm] = newString
 return newColNames


df = df.rename(columns=splitAndRenameColumns(df, "."))
print(df)