Python DataFrame:通过使用新列在df上迭代向每个单元格添加列表不起作用
带有某些列a和b的数据帧。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
现在我想添加一个新的列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]