我是熊猫新手,请问一个非常基本的问题!
通过spyder在Python v3.6上:
x= pd.DataFrame(columns = ['1','2'])
print(x)
x['1'] = '25'
print(x)
从打印语句来看,数据框x似乎没有改变。
我的问题:x['1'] = '25'
会做什么?
答案 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
将此行为与先前显示的行为进行对比。