编写python代码以使用条件语句从现有列创建新的csv列

时间:2019-05-28 03:53:39

标签: python pandas python-2.7

我是python编码的新手,并且想根据现有列上的condition语句创建一个新列。

我使用python 2.7版本并在CentO上运行代码。

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

所需的CSV文件:

FileType,Path,FileName

d,/,

f,/documents/csv/.zip,.zip

d,/documents/images,

d,/hive/28374849,

f,/hadoop/jdjdjd/dnejfn.img,dnejfn.img

我想创建一个新的FileName列,仅当Filetype =='f'列时才应从Path列中提取该列中的数据,否则该列中的数据应为空值或无数据

2 个答案:

答案 0 :(得分:1)

numpy.wherepandas.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

答案 1 :(得分:0)

尝试使用这种方法从路径中获取最后一部分。使用“ /”作为分隔符从最右边一次将字符串拆分,并使用负索引获取最后一个元素(基本上是文件名):


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,其中由于矢量化,其速度比apply函数快:

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