我是新手使用pandas并且正在编写一个脚本,我在数据框中读取,然后对某些列进行一些计算。
有时我会有一个名为“Met”的专栏:
df = pd.read_csv(File, sep='\t', compression='gzip', header=0, names=["Chrom", "Site", "coverage", "Met"])
Othertimes我会:
df = pd.read_csv(File, sep='\t', compression='gzip', header=0, names=["Chrom", "Site", "coverage", "freqC"])
我需要使用“Met”列进行一些计算,所以如果它不存在,我将需要使用以下方法进行计算:
df['Met'] = df['freqC'] * df['coverage']
有没有办法检查数据框中是否存在“Met”列,如果没有添加它?
答案 0 :(得分:26)
你这样检查:
if 'Met' not in df:
df['Met'] = df['freqC'] * df['coverage']
答案 1 :(得分:2)
如果您是从头开始创建数据框,则只需将列名传递到pd.DataFrame()
调用中,就可以创建缺少的列而没有循环:
cols = ['column 1','column 2','column 3','column 4','column 5']
df = pd.DataFrame(list_or_dict, index=['a',], columns=cols)
答案 2 :(得分:0)
如果有兴趣在 method chain 中有条件地添加列,请考虑将 pipe()
与 lambda
结合使用:
df.pipe(lambda d: (
d.assign(Met=d['freqC'] * d['coverage'])
if 'Met' not in d else d
))