python - 仅将选择列附加为行

Posted

技术标签:

【中文标题】python - 仅将选择列附加为行【英文标题】:python - append only select columns as rows 【发布时间】: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 的示例以便更容易理解问题? 【参考方案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)

【讨论】:

以上是关于python - 仅将选择列附加为行的主要内容,如果未能解决你的问题,请参考以下文章

选择 MYSQL 行,但将行选择为列,将列选择为行

Python For循环仅将最后一个值附加到列表

Python for 循环仅将最后一个列表作为值附加

在python中将列转换为行[重复]

postgreSQL 选择聚合函数中未使用的附加列

Oracle:将两个表与一个公共列加上第二个表中的一个附加列(最新生效日期)连接以选择其他列