无法通过迭代列表将值分配给pandas数据框列

时间:2018-06-29 10:27:25

标签: python-3.x list pandas

我正在更改原始代码,以显示它的简化版本。但是,这是发生主要问题的地方。 使用以下代码:

Sp=pd.DataFrame()
l1=['a', 'b', 'c']
for i in l1:
    Sp['col1'] = i

给我结果Sp为:

col1

我希望我的col1具有值a,b和c。任何人都可以提出这个问题的原因以及纠正方法。

编辑:

对于列表中的每个值,我使用它使用os连接到其他文件(文件名由列表值组成)。从那里选择了csv文件后,我从文件中获取了数据的均值,偏差等值,并将这些值分配给另一列中的sp。我的最终sp应该如下所示:

col1    Mean    Median  Deviation
a       1       1.1     0.5
b       2       2.1     0.5
c       3       3.1     0.5

1 个答案:

答案 0 :(得分:0)

编辑:如果需要每个循环,请创建DataFrame并对其进行处理,然后迭代并最终将DataFrame追加到DataFrames列表中。最后concat个所有聚合的DataFrame在一起:

dfs = []
l1 = ['a', 'b', 'c']
for i in l1:
    df = pd.read_csv(file)
    df = df.groupby('col').agg({'col1':'mean', 'col2':'sum'})
    #another code
    dfs.append(df)

Sp = pd.concat(dfs, ignore_index=True)

旧答案:

我认为需要使用DataFrame来调用list构造函数:

Sp = pd.DataFrame({'col1':l1})

如果确实需要它,但是它是slowiest possible solution

  

6)一次更新一个空行。我已经看到这种方法使用WAY过多。这是迄今为止最慢的。它可能很普通(对于某些python结构来说相当快),但是DataFrame对索引进行了大量检查,因此每次更新一行总是很慢。创建新的结构和连接要好得多。

Sp=pd.DataFrame()
l1=['a', 'b', 'c']
for j, i in enumerate(l1):
    Sp.loc[j, 'col1'] = i

print (Sp)
  col1
0    a
1    b
2    c