【问题标题】:python - append only select columns as rowspython - 仅将选择列附加为行
【发布时间】:2020-01-19 12:50:30
【问题描述】:

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

newFile sample

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 的列(就像原始文件一样)。

有什么建议吗?!

【问题讨论】:

  • 您能否提供一个 newFile 的示例以便更容易理解问题?

标签: python pandas append nan newrow


【解决方案1】:

您的问题是您正在使用 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 2021-11-26
    • 2021-09-12
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多