Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 将不同列数的多个数据帧合并为一个大数据帧_Pandas - Fatal编程技术网

Pandas 将不同列数的多个数据帧合并为一个大数据帧

Pandas 将不同列数的多个数据帧合并为一个大数据帧,pandas,Pandas,我有两个不同列数和行数的CSV文件。第一个CSV文件有M列和N行,第二个CSV文件有H列和G行。某些列具有相同的名称 我希望将这两个属性组合到具有以下属性的数据帧中: N+G行 (M,H)柱的并集 如果列A是第一个CSV文件的元素,但不是第二个CSV文件的元素,则数据框中A的前N个条目中的值应与第一个CSV中的值相同,其余的(因为第二个CSV中没有A数据)应为NA 以下是一个例子: CSV1 City, Population, Zagreb, 700000, Rijeka, 142000

我有两个不同列数和行数的CSV文件。第一个CSV文件有M列和N行,第二个CSV文件有H列和G行。某些列具有相同的名称

我希望将这两个属性组合到具有以下属性的数据帧中:

  • N+G行
  • (M,H)柱的并集
  • 如果列A是第一个CSV文件的元素,但不是第二个CSV文件的元素,则数据框中A的前N个条目中的值应与第一个CSV中的值相同,其余的(因为第二个CSV中没有A数据)应为NA
以下是一个例子:

CSV1
City, Population,
Zagreb, 700000,
Rijeka, 142000

CSV2
City, Area,
Split, 200.00
Osijek, 171.00
Dubrovnik, 143.35
我想构建一个如下所示的数据框架:

City      Population   Area
Zagreb    700000       NA
Rijeka    142000       NA
Split     NA           200.00
Osijek    NA           171.00
Dubrovnik NA           143.35
另外,如果我有两个CSV文件,我有两个数据帧,并希望执行相同的操作,例如,如果我将第一个CSV加载到
df1
,将第二个CSV加载到
df2
,然后希望合并到
df3
,这与上面的示例类似。

为什么不尝试此功能:

In [25]: df1
Out[25]: 
     City  Population
0  Zagreb      700000
1  Rijeka      142000

In [26]: df2
Out[26]: 
        City    Area
0      Split  200.00
1     Osijek  171.00
2  Dubrovnik  143.35

In [27]: pd.concat([df1,df2])
Out[27]: 
     Area       City  Population
0     NaN     Zagreb      700000
1     NaN     Rijeka      142000
0  200.00      Split         NaN
1  171.00     Osijek         NaN
2  143.35  Dubrovnik         NaN

In [28]: pd.concat([df1,df2], ignore_index=True)
Out[28]: 
     Area       City  Population
0     NaN     Zagreb      700000
1     NaN     Rijeka      142000
2  200.00      Split         NaN
3  171.00     Osijek         NaN
4  143.35  Dubrovnik         NaN
注意:如果您的要求稍有不同,则会有一些附加选项。

为什么不尝试此功能:

In [25]: df1
Out[25]: 
     City  Population
0  Zagreb      700000
1  Rijeka      142000

In [26]: df2
Out[26]: 
        City    Area
0      Split  200.00
1     Osijek  171.00
2  Dubrovnik  143.35

In [27]: pd.concat([df1,df2])
Out[27]: 
     Area       City  Population
0     NaN     Zagreb      700000
1     NaN     Rijeka      142000
0  200.00      Split         NaN
1  171.00     Osijek         NaN
2  143.35  Dubrovnik         NaN

In [28]: pd.concat([df1,df2], ignore_index=True)
Out[28]: 
     Area       City  Population
0     NaN     Zagreb      700000
1     NaN     Rijeka      142000
2  200.00      Split         NaN
3  171.00     Osijek         NaN
4  143.35  Dubrovnik         NaN

注意:如果您有稍微不同的要求,则会有一些附加选项。

@enedene我有大量的列要讨论。我不想写每个列的名称。我如何才能做到这一点?@Danish我不理解这个问题。请考虑问一个单独的问题(这样更多的人也能看到)。是的,我可以问一个单独的问题,但是这11个很简单。我只是想问一下,假设我有200个列,在这些列上我必须concat 2数据帧,而不是写*pd.concat([mdf1['user','tag1','tag2','tag3','tag4']].groupby(['user']).agg(sum)*我无法单独写入列的名称,因此必须有某种方式将dataframe中“tag1”之后的所有列都包含在内。我希望你明白我的问题@AndyHayden@Danish它需要一个列表,所以您可以进行列表理解或类似的操作。ps。您可以使用.sum()而不是.agg(sum)“安迪海登,我已经试过在争论中列一列,但是它给了我错误。最好是不应该。”是的,谢谢。SUN()。我有一大堆的列要写。我不想写这些的名字。我怎么能这么做?“丹麦我不明白这个问题。请考虑问一个单独的问题。(这样更多的人也可以看到它)。是的,我可以问一个单独的问题,但这个问题很简单。我只是问,假设我有200个列,我必须在这些列上连接2个数据帧,而不是写*pd.concat([mdf1[['user','tag1','tag2','tag3','tag4']].groupby(['user']).agg(sum)*我无法单独写入列的名称,因此必须有某种方式将dataframe中“tag1”之后的所有列都包含在内。我希望你明白我的问题@AndyHayden@Danish它需要一个列表,所以您可以进行列表理解或类似的操作。ps。您可以使用.sum()而不是.agg(sum)@我已经试着在参数中放入一列,但它给了我错误。理想情况下不应该这样做?是的,谢谢你。sum()