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
我有两个数据框,我正在尝试合并它们。
一个 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