python 将CSV中的多列合并为一列

brqmpdu1  于 2023-03-16  发布在  Python
关注(0)|答案(1)|浏览(219)

我有一个CSV文件,其中包含1000个相同df/table的版本(每个版本都来自不同的源),这些df/table都有Name和Age列。

data = [['11', 'Nick', '10', 'Dave', '4', 'Greg'], ['7', 'Nick', '10', 'Steve', '4', 'Jeff'], 
        ['1', 'Brad', np.nan, 'Jim', '3', "jas"],['1','Steve', '2', 'Jack', np.nan,np.nan]]
  
# Create DataFrame
df = pd.DataFrame(data, columns=['Age','Name', 'Age', 'Name', 'Age', 'Name'])
  
# Print the output.
df


]
我想把这些数据做成如下所示的样子--把每个版本的Name + Age放在它前面一个版本的下面,这样我就把2000列变成了两列,或者在上面的例子中,把6列变成了2列。

***姓名和年龄标题位置不正确,但请忽略

有两个重要的警告
1.每个版本的姓名+年龄需要保持其唯一的顺序。
1.我不关心姓名和年龄都是NaN的情况,我也可以忽略姓名是NaN的情况。
我试过了

df = pd.concat([df["Name"].stack().reset_index(drop=True), df["Age"].stack().reset_index(drop=True)], axis=1, keys=["Name", "Age"])

然而,这把事情搞得一团糟,NaNs把我的结果搞砸了。我最终得到了这个


]

dgsult0t

dgsult0t1#

假设您可以在内存中执行该操作,则只需使用下面的1行代码重新调整数组并将其放回Pandas中:

pd.DataFrame.from_dict({"Name": df.Name.values.reshape(-1, order="F"), "Age": df.Age.values.reshape(-1, order="F")})

这应该会得到你想要的 Dataframe

相关问题