DBl*_*ess 4 python dataframe pandas
我是熊猫新手,有一个非常基本的问题!
在通过spyder的Python v3.6上:
x= pd.DataFrame(columns = ['1','2'])
print(x)
x['1'] = '25'
print(x)
Run Code Online (Sandbox Code Playgroud)
从打印语句来看,数据框x似乎没有变化。我的问题:做x['1'] = '25'什么,如果有的话?
实际上,分配标量和可迭代对象的语义之间存在区别(请考虑诸如列表之类的列表之类的容器)。
考虑,
df = pd.DataFrame(columns=['1', '2'])
df
Empty DataFrame
Columns: [1, 2]
Index: []
Run Code Online (Sandbox Code Playgroud)
您已经定义了一个空的数据框,没有任何索引(没有行),但是只有列的架构。
将标量分配给列时,该分配将在所有行中广播。在这种情况下,由于没有任何内容,因此不会发生任何事情:
df['1'] = 123
df
Empty DataFrame
Columns: [1, 2]
Index: []
Run Code Online (Sandbox Code Playgroud)
但是,分配类似列表的可迭代对象是另一回事,因为熊猫会为其创建新行:
df['1'] = [123]
df
1 2
0 123 NaN
Run Code Online (Sandbox Code Playgroud)
现在,要了解标量分配的工作原理,请考虑类似的空DataFrame,但具有已定义的索引:
df = pd.DataFrame(columns=['1', '2'], index=[0, 1])
df
1 2
0 NaN NaN
1 NaN NaN
Run Code Online (Sandbox Code Playgroud)
它仍然是“空的”(不是真的),但是现在我们可以分配标量,并且分配是广播的,
df['1'] = 123
df
1 2
0 123 NaN
1 123 NaN
Run Code Online (Sandbox Code Playgroud)
将此行为与先前显示的进行对比。