将列表附加为数据框行

Posted

技术标签:

【中文标题】将列表附加为数据框行【英文标题】:appending a list as dataframe row 【发布时间】:2019-04-29 06:09:16 【问题描述】:

我有一个包含 5 个元素的计数列表。

counts = [33, 35, 17, 38, 29]

此计数列表每天都会用新数字更新。所以我想创建一个数据框并将计数数据添加为每天的新行。列表的每个元素都应出现在数据框中的单独列中。我想做的是:

df = pd.DataFrame(columns = ['w1', 'w2', 'w3', 'w4', 'w5'])
df = df.append(counts)

但不是将计数数据添加为一行,而是添加一个新列。有关如何正确执行此操作的任何帮助?

假设第 0 天的计数是 [33, 35, 17, 38, 29],第 1 天的计数是 [30, 36, 20, 34, 32],我想要的输出如下:

      w1 w2 w3 w4 w5
    0 33 35 17 38 29
    1 30 36 20 34 32

其中 index 表示进行计数的日期。有什么帮助吗?

【问题讨论】:

【参考方案1】:
ran_list =[]
for i in list(range(0,12)):
     ran_list.append(round(random.uniform(133.33, 266.66),3))
print(ran_list)

df = pd.DataFrame([ran_list])
df

【讨论】:

【参考方案2】:

附加到 DataFrame 是可能的,但是如果行多的话会很慢,最好是创建列表列表并由构造函数创建 DataFrame

counts = [33, 35, 17, 38, 29]
counts1 = [37, 8, 1, 2, 0]

L = [counts, counts1]
df = pd.DataFrame(L, columns = ['w1', 'w2', 'w3', 'w4', 'w5'])
print (df)

   w1  w2  w3  w4  w5
0  33  35  17  38  29
1  37   8   1   2   0

但如果需要,例如每天只追加一行,然后有必要创建具有相同索引值的Series,例如columns

df = pd.DataFrame(columns = ['w1', 'w2', 'w3', 'w4', 'w5'])

counts = [33, 35, 17, 38, 29]

s = pd.Series(counts, index=df.columns)
df = df.append(s, ignore_index=True)
print (df)
   w1  w2  w3  w4  w5
0  33  35  17  38  29

【讨论】:

【参考方案3】:

如果您一开始就知道day0day1,那么您想按照jezrael 的建议构建它。

但是我假设您希望能够在循环中添加新行。

解决方案loc

使用loc 时,您需要使用尚不存在的索引值。在这种情况下,我假设我们正在维护一个通用的RangeIndex。如果是这样,我会假设下一个索引与当前 DataFrame 的长度相同。

df.loc[len(df), :] = counts
df

   w1  w2  w3  w4  w5
0  33  35  17  38  29

让我们循环。

day0 = [33, 35, 17, 38, 29]
day1 = [30, 36, 20, 34, 32]

for counts in [day0, day1]:
  df.loc[len(df), :] = counts

df

     w1    w2    w3    w4    w5
0  33.0  35.0  17.0  38.0  29.0
1  30.0  36.0  20.0  34.0  32.0

【讨论】:

非常感谢。

以上是关于将列表附加为数据框行的主要内容,如果未能解决你的问题,请参考以下文章

将列表附加到 R 中的列表列表

将列表附加到R中的数据框

无法使用参数列表调用类型“附加”

如何将列表项附加到数据框中的特定列?

如何在for循环中将数据附加到空列表?

将数据框列表附加到python中的数据框列表