0

原始文件有多个列,但有很多空白,我想重新排列,以便有一个包含信息的好列。从 910 行开始,51 列(newFile df)-> 想要 910+x 行,3 列(最终 df)最终 df 有 910 行。

新文件示例

for i in range (0,len(newFile)):
    for j in range (0,48):
        if (pd.notnull(newFile.iloc[i,3+j])):
            final=final.append(newFile.iloc[[i],[0,1,3+j]], ignore_index=True)

我有这段代码要遍历 newFile,如果 3+j 列不为空,则将 0、1、3+j 列复制到新行。我尝试了 append() 但它不仅添加了行,而且还添加了一堆带有 NaN 的列(就像原始文件一样)。

有什么建议么?!

4

1 回答 1

0

您的问题是您正在使用 DataFrame 并保留列名,因此添加一个带有值的新列将为数据框的其余部分填充 NaN 新列。
另外,考虑到双 for 循环,您的代码确实效率低下。这是我使用的解决方案melt()

#creating example df
df = pd.DataFrame(numpy.random.randint(0,100,size=(100, 51)), columns=list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY'))
#reconstructing df as long version, keeping columns from index 0 to index 3
df = df.melt(id_vars=df.columns[0:2])
#dropping the values that are null
df.dropna(subset=['value'],inplace=True)
#here if you want to keep the information about which column the value is coming from you stop here, otherwise you do 
df.drop(inplace=True,['variable'],axis=1)
print(df)
于 2019-09-18T16:19:39.373 回答