Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DataFrame:通过使用新列在df上迭代向每个单元格添加列表不起作用_Python_Python 3.x_Pandas - Fatal编程技术网

Python DataFrame:通过使用新列在df上迭代向每个单元格添加列表不起作用

Python DataFrame:通过使用新列在df上迭代向每个单元格添加列表不起作用,python,python-3.x,pandas,Python,Python 3.x,Pandas,带有某些列a和b的数据帧。 现在我想添加一个新的列c,它应该包含(不同长度的)列表 给出: a b c 0 1 5 [] 1 2 6 [] 2 3 7 [] 为什么我不能做到以下几点: for i in range(len(df1)): df1.loc[i,'c'] = [2]*i 这会导致ValueError:无法使用长度与值不同的多索引选择索引器进行设置 然而,这是可行的: df1['c'] = pd.Series([[2], [2,2], [2,2

带有某些列a和b的数据帧。
现在我想添加一个新的列c,它应该包含(不同长度的)列表

给出:

   a  b   c
0  1  5  []
1  2  6  []
2  3  7  []
为什么我不能做到以下几点:

for i in range(len(df1)):
    df1.loc[i,'c'] = [2]*i
这会导致
ValueError:无法使用长度与值不同的多索引选择索引器进行设置

然而,这是可行的:

df1['c'] = pd.Series([[2], [2,2], [2,2,2]])
print(df1)
结果:

    a   b   c
0   1   5   [2]
1   2   6   [2, 2]
2   3   7   [2, 2, 2]

有没有一种方法可以通过使用for循环进行迭代来分配列表?(我有很多其他的东西已经在循环中分配了,现在我需要添加新的列表)

这里有一个解决方案,你可以尝试使用



这里有一个解决方案,您可以尝试使用



您可以使用
。在

for i, idx in enumerate(df1.index, 1):
    df1.at[idx, "c"] = [2] * i

print(df1)
印刷品:

   a  b          c
0  1  5        [2]
1  2  6     [2, 2]
2  3  7  [2, 2, 2]

您可以使用
。在

for i, idx in enumerate(df1.index, 1):
    df1.at[idx, "c"] = [2] * i

print(df1)
印刷品:

   a  b          c
0  1  5        [2]
1  2  6     [2, 2]
2  3  7  [2, 2, 2]

对于范围内的i(len(df1)):df1.loc[i,'c']=str([2]*(i+1))对于范围内的i(len(df1)):df1.loc[i,'c']=str([2]*(i+1)),谢谢。这个很好用。
.at[]
.loc[]
之间的实际区别是什么?@Crysers
。at
用于访问单个值,
.loc
可以访问值组,也可以用于布尔索引。谢谢。这个很好用。
.at[]
.loc[]
之间的实际区别是什么?@Crysers
。at
用于访问单个值,
.loc
可以访问值组,也可以用于布尔索引。这种语法非常密集。您能否为那些可能不熟悉用作索引的
或您正在使用的理解的读者添加一些文本?此语法非常密集。您能否为可能不熟悉用作索引的
或您正在使用的理解的读者添加一些文本?
for i, idx in enumerate(df1.index, 1):
    df1.at[idx, "c"] = [2] * i

print(df1)
   a  b          c
0  1  5        [2]
1  2  6     [2, 2]
2  3  7  [2, 2, 2]