.fillna列,如果Pandas中有两个单元格为空

时间:2016-02-26 05:15:45

标签: python pandas bioinformatics

有人可以告诉我为什么在我的for循环中

@Subscribe
public void yourMethod(Event event) {
    //your code throw exception
}
即使if语句的第二部分中引用的列不为null,

df_all = pd.read_csv("assembly_summary.txt", delimiter='\t', index_col=0) for row in df_all.index: if pd.isnull(df_all.infraspecific_name[row]) and pd.isnull(df_all.isolate[row]): df_all.infraspecific_name.fillna('NA', inplace=True) print(df_all[['infraspecific_name', 'isolate']]) 也会填充指定的单元格?  如果我的if语句中引用的两个单元格都为空,我只想使用.fillna

我也尝试将第二行更改为.fillna哪一项也不起作用。

df_all.infraspecific_name[row].fillna('NA', inplace=True)更正了问题,但是当单元格df_all.loc[row,['infraspecific_name']].fillna('NA', inplace=True)infraspecific_name都为空时,它并没有用“NA”填充单元格<&#39; < / p>

我不确定我是否缺乏理解是在Python循环或Pandas中。

我正在使用的.csv文件位于ftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/bacteria/assembly_summary.txt

2 个答案:

答案 0 :(得分:1)

这可以让你得到你想要的东西

csvfile = 'ftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/bacteria/assembly_summary.txt'
df_all = pd.read_csv(csvfile, delimiter='\t', index_col=0)
mask = df_all[['infraspecific_name', 'isolate']].isnull().all(axis=1)
df_all.loc[mask, 'infraspecific_name'] = 'NA'

第3行使用这些值df_all[['infraspecific_name', 'isolate']]然后为空值.isnull()的每个值测试。然后,最后一部分.all(axis=1)将查明每行中的所有列是否都包含真值。

第4行正在使用该掩码来查找需要更改的值的位置。

答案 1 :(得分:1)

由于您要为第一个col建立索引,因此可以使用update

df_all['infraspecific_name']

仅返回指定列的系列。以下内容仅对选择(元素)行.fillna

执行[where condition True]
[(df_all['infraspecific_name'].isnull()) & (df_all['isolate'].isnull())].fillna('NA')

您可以通过将上述内容与update之前的内容结合起来,在一行中完成所有步骤。

df_all.update(df_all['infraspecific_name'][(df_all['infraspecific_name'].isnull()) & (df_all['isolate'].isnull())].fillna('NA'))

更改的行数

len(df_all[df_all['infraspecific_name'] == 'NA'])
1825

数据帧的其余部分应该完整无缺。