我正在尝试迭代具有非顺序索引标签的Pandas DataFrame(逐行)。换句话说,一个Dataframe的索引标签如下所示:df
。没有行/索引标签 for col in list(df): #All columns
for row in df[1].iterrows(): ##All rows, except first
if pd.isnull(df.loc[row[0],'Album_Name']): ##If this cell is empty all in the same row too.
continue
elif pd.isnull(df.loc[row[0], col]) and pd.isnull(df.loc[row[0]+1, col]): ##If a cell and next one are empty, take previous value.
df.loc[row[0], col] = df.loc[row[0]-1, col]
。我想迭代DataFrame来根据条件更新/编辑每行中的某些值,因为我正在阅读Excel工作表(已合并单元格)到DataFrames中。
我尝试了以下代码(@ Manuel's answer)来遍历KeyError: the label [10] is not in the [index]
的每一行,并在条件适用的情况下编辑每一行。
{{1}}
但是,由于DataFrame具有非顺序索引标签,因此出现以下错误消息:{{1}}。 如何使用非连续索引标签迭代和编辑DataFrame(逐行)?
供参考,这是我的Excel工作表和DataFrame的样子:
答案 0 :(得分:0)
是的,只需将第二个循环更改为:
for row in df:
然后引用带有" row"的行,而不是名称。
for col in df: #All columns
for row in df: ##All rows, except first
if row==1:
continue #this skips to next loop iteration
if pd.isnull(df.loc[row[0],'Album_Name']): ##If this cell is empty all in the same row too.
continue
elif pd.isnull(df.loc[row[0], col]) and pd.isnull(df.loc[row[0]+1, col]): ##If a cell and next one are empty, take previous value.
df.loc[row[0], col] = df.loc[row[0]-1, col]