首页 > 解决方案 > 编写 python 代码以使用条件语句从现有列创建新的 csv 列

问题描述

我是 python 编码的新手,想根据现有列的条件语句创建一个新列。

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

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 列中提取,否则该列中的数据应为空值或无数据

标签: pythonpandaspython-2.7

解决方案


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

推荐阅读