熊猫:合并2个数据帧后重新排列列而无需重新索引

时间:2019-06-27 05:36:03

标签: python pandas csv

我有两个数据帧,后来又合并为一个。 对于第一个数据帧 dfm ,我有一个字典正在写入数据帧,但出现错误

ValueError: If using all scalar values, you must pass an index

在搜索SO之后,我使用了index = [0]。但是现在,当我合并另一个数据帧时,我在第二个数据帧中获得了两个索引,分别具有0和NaN值。

第一个数据帧:

col=['Target_Tab', 'Source_Tab', 'exp']
dfm = pd.DataFrame(s, columns = ['Target_Tab', 'Source_Tab', 'exp'],index=[0])
print(dfm)

输出:

          Target_Tab             Source_Tab                  exp
0          employees             employee              emp_id  =  old_emp_id

第二个数据帧

col=['Source_Col', 'Target_Col']
dft = pd.concat([pd.Series(v.split(), name=k) for k, v in d1.items()], axis=1).fillna('')[col]

print(dft)

输出:

    Source_Col            Target_Col
0           id            emp_id
1        last_name       l_name
2       first_name      f_name
3            email           email
4     phone_number    phone_number
5         JOB_DATE        JOB_DATE

合并后:

dfa = pd.concat([dfm, dft],sort=False)
dfa

输出:

         Source_Tab          Source_Col         Target_Tab       Target_Col  \
0              employee           NaN             employees             NaN   
0                  NaN           id                      NaN            emp_id   
1                  NaN      last_name                  NaN          l_name   
2                  NaN      first_name                  NaN          f_name   
3                  NaN           email                  NaN           email   
4                  NaN    phone_number                  NaN    phone_number   
5                  NaN        JOB_DATE                  NaN        JOB_DATE   


               expr  
0   emp_id  =  old_emp_id  
0                     NaN  
1                     NaN  
2                     NaN  
3                     NaN  
4                     NaN  
5                     NaN  

如何获取一个[0]索引,以使两个数据帧[0]索引值位于同一行,即开头类似这样。

      Source_Tab     Source_Col   Target_Tab   Target_Col   expr

0     employee      id           employees     emp_id      emp_id  = old_emp_id
1       NaN        last_name      NaN          l_name      Nan
.
.
.

2 个答案:

答案 0 :(得分:0)

我明白了。我在axis=1中添加了参数dfa = pd.concat([dfm, dft],sort=False,axis=1) 被引荐的axis

答案 1 :(得分:0)

我认为您正在寻找外部联接

import pandas as pd

s=["a","b","c"]
col=['Target_Tab', 'Source_Tab', 'exp']
df=pd.DataFrame(s).T
df.columns=col
print(df)
col2=['Source_Col', 'Target_Col']
Source_Col=[1,2,3,4,5]
Target_Col=[1,2,3,4,5]
df2=pd.DataFrame([Source_Col,Target_Col]).T
df2.columns=col2
print(df2)
df.join(df2, how='outer')