编写python代码,使用条件语句从现有列创建新的csv列
我是python编码新手,希望基于现有列上的条件语句创建一个新列 我使用Python2.7版本,并在CentOs上运行代码编写python代码,使用条件语句从现有列创建新的csv列,python,pandas,python-2.7,Python,Pandas,Python 2.7,我是python编码新手,希望基于现有列上的条件语句创建一个新列 我使用Python2.7版本,并在CentOs上运行代码 import pandas as pd file1 = pd.read_csv("/root/Documents/temp_file_{}.csv".format(timestr)) file1['FileName'] = '' file1['FileName'] =
import pandas as pd
file1 = pd.read_csv("/root/Documents/temp_file_{}.csv".format(timestr))
file1['FileName'] = ''
file1['FileName'] = file1['FileType'].apply(lambda x: df['Path'].str.extract('[^/]+$', expand=False) if x=='f' else '')
file1.to_csv('/root/Documents/temp1_file_{}.csv'.format(timestr),index = False)
下面是我的CSV文件:
FileType,Path
d,/
f,/documents/csv/.zip
d,/documents/images
d,/hive/28374849
f,/hadoop/jdjdjd/dnejfn.img
FileType,Path,FileName
d,/,
f,/documents/csv/.zip,.zip
d,/documents/images,
d,/hive/28374849,
f,/hadoop/jdjdjd/dnejfn.img,dnejfn.img
所需的CSV文件:
FileType,Path
d,/
f,/documents/csv/.zip
d,/documents/images
d,/hive/28374849
f,/hadoop/jdjdjd/dnejfn.img
FileType,Path,FileName
d,/,
f,/documents/csv/.zip,.zip
d,/documents/images,
d,/hive/28374849,
f,/hadoop/jdjdjd/dnejfn.img,dnejfn.img
我想创建一个新的列文件名,其中该列中的数据应仅在列文件类型=='f'时从路径列中提取,否则该列中的数据应为空值或无数据尝试使用此方法从路径中获取最后一部分。使用“/”作为分隔符从最右侧拆分字符串一次,并使用负索引获取最后一个元素(基本上是文件名):
file1['FileName'] = ''
file1['FileName'] = file1.apply(lambda x: x['Path'].rsplit("/", 1)[-1] if x["FileType"]=='f' else '' , axis=1)
file1
FileType Path FileName
0 d /
1 f /documents/csv/.zip .zip
2 d /documents/images
3 d /hive/28374849
4 f /hadoop/jdjdjd/dnejfn.img dnejfn.img
使用numpy的where,由于矢量化,它比应用函数快:
file1['FileName'] = np.where(file1["FileType"]=='f', file1['Path'].str.rsplit("/", n=1).str[-1], '')
FileType Path FileName
0 d /
1 f /documents/csv/.zip .zip
2 d /documents/images
3 d /hive/28374849
4 f /hadoop/jdjdjd/dnejfn.img dnejfn.img
使用
numpy.where
和pandas.Series.str.rsplit
:
import numpy as np
import pandas as pd
df['FileName'] = np.where(df['FileType'].eq('f'),df['Path'].str.rsplit('/').str.get(-1), '')
输出:
FileType Path FileName
0 d /
1 f /documents/csv/.zip .zip
2 d /documents/images
3 d /hive/28374849
4 f /hadoop/jdjdjd/dnejfn.img dnejfn.img
numpy
是不需要的,但无论如何,这是一个解决方案。