pandas.concat两个数据框(一个有一个没有headers)

pandas.concat two data frames (one with and one without headers)

我有两个数据框,我正在尝试合并它们。

一个 json 文件 headers:

| category 1 | category 2  | category 3   | category 4   |
|:-----------|------------:|:------------:|:------------:|
|   name1    | attribute1  |   amount1    | other1       |
|   name2    | attribute2  |   amount2    | other2       |

还有一个 Excel 文件,其数据格式相同,但没有 headers:

|:-----------|------------:|:------------:|:------------:|
|   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  |

我已经尝试使用一些属性的 concat 函数,例如 ignore_index=True,但到目前为止没有任何效果。

试试

data2.columns=data.columns
data = pd.concat([data, data2])

连接值并创建新数据框。

import numpy as np
pd.DataFrame(np.concatenate((df1.values,df2.values)),columns=df1.columns)

连接一个我能想到的解决方案是定义列名并将列表中的一列与列表 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