将列表附加为数据框行
appending a list as dataframe row
我有一个列表,其中包含一些包含 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
其中索引表示进行计数的日期。有帮助吗?
追加到 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
但如果需要,例如每天仅 appenf 一行,然后有必要创建 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
如果您一开始就知道 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
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
我有一个列表,其中包含一些包含 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
其中索引表示进行计数的日期。有帮助吗?
追加到 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
但如果需要,例如每天仅 appenf 一行,然后有必要创建 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
如果您一开始就知道 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
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