如何将python列表附加到包含数组的每个数据帧单元?
我的代码:如何将python列表附加到包含数组的每个数据帧单元?,python,pandas,Python,Pandas,我的代码: df=pd.DataFrame(columns=["a","b"], index=np.arange(1,3)) for col in df.columns: df[col].values[:]=[[]*2] print(df) for col,n in enumerate(df.columns): for row in range(1,3): df[n][row].append([1,2,3]) print(df)
df=pd.DataFrame(columns=["a","b"], index=np.arange(1,3))
for col in df.columns:
df[col].values[:]=[[]*2]
print(df)
for col,n in enumerate(df.columns):
for row in range(1,3):
df[n][row].append([1,2,3])
print(df)
a b
1 [] []
2 [] []
0 a
a b
1 [[1, 2, 3]] []
2 [[1, 2, 3]] []
0 a
a b
1 [[1, 2, 3], [1, 2, 3]] []
2 [[1, 2, 3], [1, 2, 3]] []
1 b
a b
1 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3]]
2 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3]]
1 b
a b
1 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3], [1, 2, 3]]
2 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3], [1, 2, 3]]
a b
1 [] []
2 [] []
0 a
a b
1 [[1,2,3]] []
2 [] []
0 a
a b
1 [[1,2,3]] []
2 [[1,2,3]] []
1 b
a b
1 [[1,2,3]] [[1,2,3]]
2 [[1,2,3]] []
1 b
a b
1 [[1,2,3]] [[1,2,3]]
2 [[1,2,3]] [[1,2,3]]
输出:
df=pd.DataFrame(columns=["a","b"], index=np.arange(1,3))
for col in df.columns:
df[col].values[:]=[[]*2]
print(df)
for col,n in enumerate(df.columns):
for row in range(1,3):
df[n][row].append([1,2,3])
print(df)
a b
1 [] []
2 [] []
0 a
a b
1 [[1, 2, 3]] []
2 [[1, 2, 3]] []
0 a
a b
1 [[1, 2, 3], [1, 2, 3]] []
2 [[1, 2, 3], [1, 2, 3]] []
1 b
a b
1 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3]]
2 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3]]
1 b
a b
1 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3], [1, 2, 3]]
2 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3], [1, 2, 3]]
a b
1 [] []
2 [] []
0 a
a b
1 [[1,2,3]] []
2 [] []
0 a
a b
1 [[1,2,3]] []
2 [[1,2,3]] []
1 b
a b
1 [[1,2,3]] [[1,2,3]]
2 [[1,2,3]] []
1 b
a b
1 [[1,2,3]] [[1,2,3]]
2 [[1,2,3]] [[1,2,3]]
我希望将输出作为列表添加到所有单元格中。但是列表不是添加到单元格中,而是添加到列的每一行中。请帮忙。先谢谢你
建议输出:
df=pd.DataFrame(columns=["a","b"], index=np.arange(1,3))
for col in df.columns:
df[col].values[:]=[[]*2]
print(df)
for col,n in enumerate(df.columns):
for row in range(1,3):
df[n][row].append([1,2,3])
print(df)
a b
1 [] []
2 [] []
0 a
a b
1 [[1, 2, 3]] []
2 [[1, 2, 3]] []
0 a
a b
1 [[1, 2, 3], [1, 2, 3]] []
2 [[1, 2, 3], [1, 2, 3]] []
1 b
a b
1 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3]]
2 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3]]
1 b
a b
1 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3], [1, 2, 3]]
2 [[1, 2, 3], [1, 2, 3]] [[1, 2, 3], [1, 2, 3]]
a b
1 [] []
2 [] []
0 a
a b
1 [[1,2,3]] []
2 [] []
0 a
a b
1 [[1,2,3]] []
2 [[1,2,3]] []
1 b
a b
1 [[1,2,3]] [[1,2,3]]
2 [[1,2,3]] []
1 b
a b
1 [[1,2,3]] [[1,2,3]]
2 [[1,2,3]] [[1,2,3]]
在Python中,执行
[[[]*2]
实际上并没有像您可能期望的那样产生[[]],[]]
,而是[[[]]
。当您执行df[col].values[:]=[[[]*2]
时,实际上是将列col
中的所有行设置为同一个列表。您可以这样检查:
df = pd.DataFrame(columns=["a","b"], index=np.arange(1,3))
df["a"].values[:] = [[] * 2]
df["a"][1].append([1,2,3])
print(df)
执行上述操作后,df
将变为如下所示,因为您实际上同时修改了两行:
a b
1 [[1, 2, 3]] NaN
2 [[1, 2, 3]] NaN
您要做的是:
for col in df.columns:
for row in df.index:
df[col][row] = []
然后
(还请注意,我没有使用
enumerate(df.columns)
,因为我们不需要它,而是用df.index替换了range(1,3)
)你能显示预期的输出吗?我已经编辑了问题,包括建议的输出。请看一看。非常感谢。