在为我自己回答这个问题的过程中,我学到了很多东西,并且我想整理出一系列示例和一些说明。
有关levels参数争论点的具体答案即将结束。
pandas.concat :缺少的手册
导入和定义对象
import pandas as pd
d1 = pd.DataFrame(dict(A=.1, B=.2, C=.3), index=[2, 3])
d2 = pd.DataFrame(dict(B=.4, C=.5, D=.6), index=[1, 2])
d3 = pd.DataFrame(dict(A=.7, B=.8, D=.9), index=[1, 3])
s1 = pd.Series([1, 2], index=[2, 3])
s2 = pd.Series([3, 4], index=[1, 2])
s3 = pd.Series([5, 6], index=[1, 3])
争论
objs
我们遇到的第一个参数是objs :
objs :Series,DataFrame或Panel对象的序列或映射。如果传递了dict,则除非传递了已排序的键,否则它将用作keys参数,在这种情况下,将选择值(请参见下文)。 除非所有对象都为None,否则所有None对象都将被静默删除,在这种情况下,将引发ValueError
我们通常将其与Series或DataFrame对象的列表一起使用。
我将展示dict也会非常有用。
也可以使用发电机和使用时可以是有用的map中map(f, list_of_df)
现在,我们将坚持上面定义的一些DataFrame和Series对象的列表。 稍后我将展示如何利用字典来提供非常有用的MultiIndex结果。
pd.concat([d1, d2])
A B C D
2 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN
1 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6
axis
我们遇到的第二个参数是axis其默认值为0 :
axis :{0 /'index',1 /'columns'},默认值为0。
两个DataFrame的axis=0 (堆叠)
对于0或index值,我们的意思是说:“沿列对齐并添加到索引”。
如上所示,我们使用axis=0 ,因为0是默认值,并且我们看到d2的索引扩展了d1的索引,尽管值2有重叠:
pd.concat([d1, d2], axis=0)
A B C D
2 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN
1 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6
两个DataFrame其中axis=1 (并排)
对于值1或columns我们的意思是说:“沿索引对齐并添加到列中”,
pd.concat([d1, d2], axis=1)
A B C B C D
1 NaN NaN NaN 0.4 0.5 0.6
2 0.1 0.2 0.3 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN
我们可以看到,结果索引是索引的并集,结果列是d1的列对d2的列的扩展。
axis=0两个(或三个) Series (堆叠)
当沿着axis=0组合pandas.Series ,我们得到一个pandas.Series 。 除非合并的所有Series具有相同的名称,否则所得Series的名称将为“ None 。 当我们打印出所得的Series时,请注意'Name: A' 。 当它不存在时,我们可以假定Series名称为None 。
| | | pd.concat(
| pd.concat( | pd.concat( | [s1.rename('A'),
pd.concat( | [s1.rename('A'), | [s1.rename('A'), | s2.rename('B'),
[s1, s2]) | s2]) | s2.rename('A')]) | s3.rename('A')])
-------------- | --------------------- | ---------------------- | ----------------------
2 1 | 2 1 | 2 1 | 2 1
3 2 | 3 2 | 3 2 | 3 2
1 3 | 1 3 | 1 3 | 1 3
2 4 | 2 4 | 2 4 | 2 4
dtype: int64 | dtype: int64 | Name: A, dtype: int64 | 1 5
| | | 3 6
| | | dtype: int64
axis=1两个(或三个) Series (并排)
当沿着axis=1组合pandas.Series ,它是我们引用的name属性,以推断结果pandas.DataFrame的列名称。
| | pd.concat(
| pd.concat( | [s1.rename('X'),
pd.concat( | [s1.rename('X'), | s2.rename('Y'),
[s1, s2], axis=1) | s2], axis=1) | s3.rename('Z')], axis=1)
------------