将数据框的字段的一部分转换为小写[Pandas]

时间:2019-02-25 12:30:00

标签: python pandas

我有一个包含以下内容的数据框:

df=pd.DataFrame(['DMA.CSV','NaN' , 'AEB.csv', 'Xy.PY'],columns=['File_Name'])

获取所有扩展名转换为小写(不包括NaN)的File_Name的有效方法是什么。输出应如下所示:

['DMA.csv','NaN' , 'AEB.csv', 'Xy.py']

5 个答案:

答案 0 :(得分:1)

此变量从输出中排除CSSStyleDeclaration

'NaN'

答案 1 :(得分:0)

您也可以尝试以下方法:

def lower_suffix(mystr):
    if '.' in mystr:
        return mystr[:mystr.rfind('.')]+mystr[mystr.rfind('.'):].lower()
    else:
        return mystr

df['File_Name'] = df['File_Name'].apply(lower_suffix)
print(df)

您正在应用的功能是查找最后一个“。”(如果存在)。文件名中的内容,然后用小写字母替换。

答案 2 :(得分:0)

使用SomeArg

例如:

os.path.splitext

输出:

import pandas as pd
import os

df=pd.DataFrame(['Hello.world.txt', 'DMA.CSV','NaN' , 'AEB.csv', 'Xy.PY'],columns=['File_Name'])
df["File_Name"] = [ filename+ext.lower() if ext else filename for filename,ext in df["File_Name"].apply(os.path.splitext) ]
print(df)

答案 3 :(得分:0)

您可以尝试以下方法:

import pandas as pd
df=pd.DataFrame(['DMA.CSV','NaN' , 'AEB.csv', 'Xy.PY'],columns=['File_Name'])
for i, v in enumerate(df['File_Name'].str.split('.')):
    if len(v) == 2:
        df.iloc[i] = v[0]+'.'+v[1].lower()
    else:
        df.iloc[i] = v[0]

print(df)

  File_Name
0   DMA.csv
1       NaN
2   AEB.csv
3     Xy.py

答案 4 :(得分:0)

经过大量研究,我发现以下方法非常简单:

df['File_Name'] = [x.rsplit('.',1)[0]+'.'+x.rsplit('.',1)[-1].lower() if '.' in str(x) 
   else x for x in df['File_Name']]

这将排除所有NaN值,并且还会处理文件名中的多个点('。')(如“ Hello.World.TXT”)