有人可以告诉我为什么在我的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
答案 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
数据帧的其余部分应该完整无缺。