我有一个用于CSV文件的URLS列表和一个名称列表,在for循环中,我需要将每个CSV转换为一个DataFrame,并在名称列表中的同一索引处添加一个包含名称的列。>
我可以成功下载每个CSV并创建一个数据框,然后将其附加到新的数据框,但是在同一迭代中添加列时遇到了问题。
以下是我目前所拥有的。
for url, name in zip(url_list, name_list):
df.append(pd.read_csv(url))
df['Name'] = name
complete_df = pd.concat(df, ignore_index = True)
这将导致错误
form_dfs ['名称'] =名称 TypeError:列表索引必须是整数或切片,而不是str
答案 0 :(得分:0)
您实际上是在向不合法的列输入字符串。是否需要在整个列中添加相同的名称?
如果是这种情况,则需要执行以下操作:
df['Name']=pd.Series([name for i in range(len(df))])
如果您想要其他东西,请详细说明
答案 1 :(得分:0)
发生此错误是因为您的代码正在尝试使用字符串对列表进行索引。相反,您可以使用pd.DataFrame.assign
内联添加一系列:
df = []
for url, name in zip(url_list, name_list):
df.append(pd.read_csv(url).assign(Name=name)
complete_df = pd.concat(df, ignore_index=True)
另一种方法是使用列表理解:
df = [pd.read_csv(url).assign(Name=name) for url, name in zip(url_list, name_list)]
complete_df = pd.concat(df, ignore_index=True)