将列表附加为数据框行
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】:如果您一开始就知道day0
和day1
,那么您想按照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
【讨论】:
非常感谢。以上是关于将列表附加为数据框行的主要内容,如果未能解决你的问题,请参考以下文章