Pandas 将不同列数的多个数据帧合并为一个大数据帧
我有两个不同列数和行数的CSV文件。第一个CSV文件有M列和N行,第二个CSV文件有H列和G行。某些列具有相同的名称 我希望将这两个属性组合到具有以下属性的数据帧中: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
- 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()