我必须在名为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)
答案 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中的元素扩展列表。