gpt4 book ai didi

pandas - df.loc[rows, [col]] 与 df.loc[rows, col] 在分配中

转载 作者:行者123 更新时间:2023-12-01 12:20:59 26 4
gpt4 key购买 nike

以下赋值有何不同?

df.loc[rows, [col]] = ...
df.loc[rows, col] = ...

例如:

r = pd.DataFrame({"response": [1,1,1],},index = [1,2,3] )
df = pd.DataFrame({"x": [999,99,9],}, index = [3,4,5] )
df = pd.merge(df, r, how="left", left_index=True, right_index=True)

df.loc[df["response"].isnull(), "response"] = 0
print df
x response
3 999 0.0
4 99 0.0
5 9 0.0

但是

df.loc[df["response"].isnull(), ["response"]] = 0
print df
x response
3 999 1.0
4 99 0.0
5 9 0.0

为什么我应该期望第一个行为与第二个行为不同?

最佳答案

df.loc[df["response"].isnull(), ["response"]]

返回一个DataFrame,所以如果你想给它赋值,它必须同时与索引和列对齐

演示:

In [79]: df.loc[df["response"].isnull(), ["response"]] = \
pd.DataFrame([11,12], columns=['response'], index=[4,5])

In [80]: df
Out[80]:
x response
3 999 1.0
4 99 11.0
5 9 12.0

或者,您可以分配一个相同形状的数组/矩阵:

In [83]: df.loc[df["response"].isnull(), ["response"]] = [11, 12]

In [84]: df
Out[84]:
x response
3 999 1.0
4 99 11.0
5 9 12.0

我也会考虑使用 fillna() 方法:

In [88]: df.response = df.response.fillna(0)

In [89]: df
Out[89]:
x response
3 999 1.0
4 99 0.0
5 9 0.0

关于pandas - df.loc[rows, [col]] 与 df.loc[rows, col] 在分配中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44012669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com