附加到列表不起作用

时间:2015-09-23 14:50:42

标签: python append dataframe

我必须在名为merged1的数据框中添加一个名为“sessions”的列。列会话在循环中更新,它是列表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)

1 个答案:

答案 0 :(得分:2)

当你这样做时 -

y.append(x * len(data))

您实际上将大小为len(data) * len(x)的列表附加到y,以便y成为列表列表。

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

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

y.extend(x * len(data))

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