将标量值分配给空的DataFrame似乎没有任何作用

时间:2019-06-14 17:21:50

标签: python pandas dataframe

我是熊猫新手,请问一个非常基本的问题!

通过spyder在Python v3.6上:

x= pd.DataFrame(columns = ['1','2'])
print(x)
x['1'] = '25'
print(x)

从打印语句来看,数据框x似乎没有改变。 我的问题:x['1'] = '25'会做什么?

1 个答案:

答案 0 :(得分:7)

分配标量和可迭代对象的语义实际上是有区别的(认为容器是诸如列表之类的列表之类的容器)。

考虑

df = pd.DataFrame(columns=['1', '2'])                                                                                             
df                                                                                                                                  

Empty DataFrame
Columns: [1, 2]
Index: []

您已经定义了一个 empty 数据框,该数据框没有任何索引(没有行),而只是列的架构。

当您将标量分配给列时,该分配将在所有行中广播。在这种情况下,由于什么也没有,所以什么也没发生:

df['1'] = 123
df

Empty DataFrame
Columns: [1, 2]
Index: []

但是,分配类似列表的可迭代对象是另一回事,因为熊猫会为其创建新行:

df['1'] = [123]
df

     1    2
0  123  NaN

现在,要了解标量分配的工作原理,请考虑一个类似的空DataFrame,但具有已定义的索引:

df = pd.DataFrame(columns=['1', '2'], index=[0, 1])
df                                                                                                                                  

     1    2
0  NaN  NaN
1  NaN  NaN

它仍然是“空的”(不是真的),但是现在我们可以分配标量,并且分配是广播的,

df['1'] = 123
df                                                                                                                                  

     1    2
0  123  NaN
1  123  NaN

将此行为与先前显示的行为进行对比。