我有两个要合并的数据框。
带有标头的json文件:
| category 1 | category 2 | category 3 | category 4 |
|:-----------|------------:|:------------:|:------------:|
| name1 | attribute1 | amount1 | other1 |
| name2 | attribute2 | amount2 | other2 |
以及具有相同格式数据但没有标题的Excel文件:
|:-----------|------------:|:------------:|:------------:|
| name3 | attribute3 | amount3 | other3 |
| name4 | attribute4 | amount4 | other4 |
我正在尝试实现以下数据框:
| category 1 | category 2 | category 3 | category 4 |
|:-----------|------------:|:------------:|:------------:|
| name1 | attribute1 | amount1 | other1 |
| name2 | attribute2 | amount2 | other2 |
| name3 | attribute3 | amount3 | other3 |
| name4 | attribute4 | amount4 | other4 |
我的代码:
import pandas as pd
import json
import xlrd
data = pd.read_json('pandas_test.json', orient='split')
data2 = pd.read_excel("guys2.xlsx", header=None)
data = pd.concat([data, data2])
问题: 当我运行代码时,合并的数据框架如下所示:
| category 1 | category 2 | category 3 | category 4 | 1 | 2 | 3 | 4 |
|:-----------|------------:|:------------:|:------------:|:---------:|:----------:|:---------:|:---------:|
| name1 | attribute1 | amount1 | other1 | NaN | NaN | NaN | NaN |
| name2 | attribute2 | amount2 | other2 | NaN | NaN | NaN | NaN |
| NaN | NaN | NaN | NaN | name3 | attribute3 | amount3 | other3 |
| NaN | NaN | NaN | NaN | name4 | attribute4 | amount4 | other4 |
我已经尝试使用一些具有ignore_index=True
之类的属性的concat函数,但到目前为止没有任何效果。
答案 0 :(得分:3)
只需尝试
data2.columns=data.columns
data = pd.concat([data, data2])
答案 1 :(得分:2)
汇总值并创建新的数据框。
import numpy as np
pd.DataFrame(np.concatenate((df1.values,df2.values)),columns=df1.columns)
答案 2 :(得分:0)
使用一种我可以考虑的解决方案,它是定义列名称并使用您的列表与列表2一起使用列
尝试以下
data = pd.concat([data, data2])columns=data.columns)
示例
np.random.seed(100)
df1 = pd.DataFrame(np.random.randint(10, size=(2,3)), columns=list('ABF'))
print (df1)
df2 = pd.DataFrame(np.random.randint(10, size=(1,3)), columns=list('ERT'))
print (df2)
输出
A B F
0 8 8 3
1 7 7 0
E R T
0 4 2 5
使用Df1列表的列
df = pd.DataFrame(np.concatenate([df1.values, df2.values]), columns=df1.columns)
print (df)
A B F
0 8 8 3
1 7 7 0
2 4 2 5