我有一个包含以下内容的数据框:
df=pd.DataFrame(['DMA.CSV','NaN' , 'AEB.csv', 'Xy.PY'],columns=['File_Name'])
获取所有扩展名转换为小写(不包括NaN)的File_Name的有效方法是什么。输出应如下所示:
['DMA.csv','NaN' , 'AEB.csv', 'Xy.py']
答案 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”)