我是Pandas的新手,对python也是新手
我正在查看股票数据,这些数据以CSV格式读入,通常大小为500,000行。
“
”
我需要检查数据本身-基本算法是一个循环,类似于
Row = 0
x = get "low" price in row ROW
y = CalculateSomething(x)
go through the rest of the data, compare against y
if (a):
append ("A") at the end of row ROW # in the dataframe
else
print ("B") at the end of row ROW
Row = Row +1
下一次迭代时,数据指针应重置为行1。然后每次都执行相同的过程,在行索引处向 Dataframe 添加注解
我看了看Pandas,认为尝试这种方法的方法是使用两个循环,并复制 Dataframe 以维护两个单独的示例
实际代码如下所示(简化)
df = pd.read_csv('data.csv')
calc1 = 1 # this part is confidential so set to something simple
calc2 = 2 # this part is confidential so set to something simple
def func3_df_index(df):
dfouter = df.copy()
for outerindex in dfouter.index:
dfouter_openval = dfouter.at[outerindex,"Open"]
for index in df.index:
if (df.at[index,"Low"] <= (calc1) and (index >= outerindex)) :
dfouter.at[outerindex,'notes'] = "message 1"
break
elif (df.at[index,"High"] >= (calc2) and (index >= outerindex)):
dfouter.at[outerindex,'notes'] = "message2"
break
else:
dfouter.at[outerindex,'notes'] = "message3"
此方法每5 K需要很长时间(7分钟以上)-对于500,000行来说,这将是相当长的时间。可能有超过100万行的数据
我已经尝试使用两个循环的方法与以下变量:
using iloc - e.g df.iloc[index,2]
using at - e,g df.at[index,"low"]
using numpy& at - eg df.at[index,"low"] = np.where((df.at[index,"low"] < ..."
数据为浮点值和日期时间字符串。
使用numpy更好吗?也许是使用两个循环的替代方法?任何其他方法,如使用R,mongo,一些其他的数据库等-不同于python也会很有用-我只需要结果,不一定绑定到python。
任何帮助和构造都将非常有帮助
先谢了
1条答案
按热度按时间jm81lzqq1#
您必须将主数据集拆分为较小的数据集,例如50个子数据集,每个子数据集有10.000行,以提高速度。使用线程或并发在每个子数据集中执行函数,然后合并最终结果。