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 - 仅将选择列附加为行的主要内容,如果未能解决你的问题,请参考以下文章