如果我使用print
,我可以print
的所有数据。但是当我使用data=
时,它只显示i=2917
的值。如何将for loop
转换为数据框。
import pandas as pd
df = pd.read_excel('C:/Users/aaaa/Desktop/rrrrr/twstock/1101.xlsx')
for i in range (1,2917):
data='{:.6%}'.format((df['close'][i]/df['close'][i-1])-1)
答案 0 :(得分:1)
您在for循环的每次迭代中都重新分配data
。那里的数据仅包含i = 2916
的值。
如何创建一个列表,然后将其数据附加到for循环内?
data = []
for i in range(1,2917):
data.append('{:.6%}'.format((df['close'][i]/df['close'][i-1])-1))
print(data)
答案 1 :(得分:1)
我建议使用熊猫矢量化方法以提高速度和清洁度:
df = pd.read_excel('C:/Users/aaaa/Desktop/rrrrr/twstock/1101.xlsx')
data = df["close"].pct_change()
然后,您可以根据需要执行以下操作来更改为字符串表示形式列表:
string_list = ['{:.6%}'.format(x) for x in data.tolist()[1:]]
答案 2 :(得分:0)
不要像kalehmann所建议的那样遍历数据帧,这是非常低效的。您可以按照Sven的建议调用data = df["close"].pct_change()
,也可以使用与您定义的函数类似的函数:
data = df['first']/df['first'].shift(1)-1
然后您可以运行:
data_list = ['{:.6%}'.format(x) for x in data.tolist()]