附加到列表不起作用
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 中的元素扩展列表。
我必须将一个名为 '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 中的元素扩展列表。