当我通过df.loc方法和包含单个元素的列表为DataFrame指定新值时,pandas的行为与我预期的不同。
例如(在python 3.6和pandas 0.22.0中):
import pandas as pd
df = pd.DataFrame([[1,2,3]],columns=["A", "B", "C"])
# a list has two or more elements
df.loc[0, ["A", "B"]] = ["X", "Y"]
df
A B C
0 X Y 3
# a list has single element
df.loc[0, ["C"]] = ["Z"]
正如我所料
df
A B C
0 X Y Z
但结果是
df
A B C
0 X Y [Z]
这种行为是否符合熊猫的实施?
我想以相同的方式分配值,而与列表中的元素数量无关。
答案 0 :(得分:0)
似乎不建议按列表分配值。
c.f https://github.com/pandas-dev/pandas/issues/16864
相反,我将使用元素方法如下:
for i, v in enumerate(["X", "Y", "Z"]):
df.loc[0, ["A", "B", "C"]][i] = v
感谢所有评论!
编辑:
以上代码不起作用。它无法替换df中的值。 (但如果 df.loc [0,[" A"," B"," C"]] 被pd.Series取代。)
修订后的代码是
for c, v in zip(["A", "B", "C"], ["X", "Y", "Z"]):
df.loc[0, c] = v