【发布时间】:2016-01-15 13:12:54
【问题描述】:
我有一个DataFrame 列表(我读入的每个文件一个)和一个字符串列表(文件的文件名)。我想在每个DataFrame 中创建一个新列filename 并在文件名列表中为其分配相应的值。目标是在连接DataFrame 列表后识别数据源。
df = pd.DataFrame({ 'A' : pd.Series(1,index=list(range(4)),dtype='float32'),
'B' : 'bar',
'C' : 'foo' })
list_df = [df,df,df]
file_names = ['source1','source2','source3']
我正在尝试这样做:
[x.loc[:,'filename'] = file for (x,file) in (list_df,file_names)]
这显然是行不通的,因为列表理解表达式中不允许对元组进行迭代(?)。 For 循环将是一个选项(但次优)。是否可以使用列表理解来实现这一点,这是最有效的解决方案吗?
【问题讨论】:
-
列表推导是一种函数式编程工具,不要使用它们来故意制造副作用。什么是
for循环的“次优”,它可以避免毫无意义地创建一个可能只是填充了None的列表,只是为了立即收集它?
标签: python list pandas list-comprehension