pandas.concat两个数据帧(一个带头和一个不带头)

时间:2018-12-26 03:45:55

标签: python python-3.x pandas xlrd

我有两个要合并的数据框。

带有标头的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函数,但到目前为止没有任何效果。

3 个答案:

答案 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