附加到列表不起作用

Append to a list does not work

我必须将一个名为 'sessions' 的列添加到一个名为 merged1 的数据框中。会话列在循环中更新,它是列表 y。但是以下操作不起作用:

y.append(x * len(data))
merged1['sessions'] = y

这里是代码

for i in users:
    merged1 = pd.DataFrame()
    name = "%s" %i
    y = list()
    for file in glob.glob("*.csv"):
        if os.path.isfile(file):    # make sure it's a file, not a directory entry
            if name in file:   # open file
                data = pd.read_csv(file)
                data = data.loc[[k for j, k in enumerate(data.index) if j % 10 == 0]]
                data.lat = np.round(data.lat, 6)
                merged1 = pd.concat([merged1,data], ignore_index=True)
                x = re.findall(r'(?<=_session)\d+', file)
                y.append(x * len(data))
    merged1['sessions'] = y
    if len(merged1) > 0:
        merged1 = merged1[merged1.lat > 45]
        merged1.to_csv(string,index=False)

当你这样做时 -

y.append(x * len(data))

您实际上是将大小为 len(data) * len(x) 的列表附加到 y 中,因此 y 变成了一个列表列表。

因此,当您执行 - merged1['sessions'] = y - 并且 y 的大小与 merged1 的大小不同时,会导致问题。

如果您确定 x = re.findall(r'(?<=_session)\d+', file) 总是 return 只有 1 个元素,那么您可以使用 -

y.extend(x * len(data))

而不是 .append().extend() 使用传递给它的 iterable 中的元素扩展列表。