我對Python中的「for」語句非常新,我不能得到我認爲應該很簡單的東西。我的代碼,我有是:使用「for」語句使用字符串凝聚重複代碼 - Python
import pandas as pd
df1 = pd.DataFrame({'Column1' : pd.Series([1,2,3,4,5,6])})
df2 = pd.DataFrame({'Column1' : pd.Series([1,2,3,4,5,6])})
df3 = pd.DataFrame({'Column1' : pd.Series([1,2,3,4,5,6])})
DF1 = pd.DataFrame({'Column1' : pd.Series([1,2,3,4,5,6])})
DF2 = pd.DataFrame({'Column1' : pd.Series([1,2,3,4,5,6])})
DF3 = pd.DataFrame({'Column1' : pd.Series([1,2,3,4,5,6])})
然後:
A1 = len(df1.loc[df1['Column1'] <= DF1['Column1'].iloc[2]])
Z1 = len(df1.loc[df1['Column1'] >= DF1['Column1'].iloc[3]])
A2 = len(df2.loc[df2['Column1'] <= DF2['Column1'].iloc[2]])
Z2 = len(df2.loc[df2['Column1'] >= DF2['Column1'].iloc[3]])
A3 = len(df3.loc[df3['Column1'] <= DF3['Column1'].iloc[2]])
Z3 = len(df3.loc[df3['Column1'] >= DF3['Column1'].iloc[3]])
正如你可以看到,這是一個很大的重複代碼,只需識別號是不同的。所以我在「爲」語句的第一次嘗試是:
Numbers = [1,2,3]
for i in Numbers:
"A" + str(i) = len("df" + str(i).loc["df" + str(i)['Column1'] <= "DF" + str(i)['Column1'].iloc[2]])
"Z" + str(i) = len("df" + str(i).loc["df" + str(i)['Column1'] >= "DF" + str(i)['Column1'].iloc[3]])
這產生了語法錯誤:「不能分配給操作」。所以我嘗試過:
Numbers = [1,2,3]
for i in Numbers:
A = "A" + str(i)
Z = "Z" + str(i)
A = len("df" + str(i).loc["df" + str(i)['Column1'] <= "DF" + str(i)['Column1'].iloc[2]])
Z = len("df" + str(i).loc["df" + str(i)['Column1'] >= "DF" + str(i)['Column1'].iloc[3]])
這產生了AttributeError:'str'對象沒有屬性'loc'。我嘗試了一些其他的東西,如:
Numbers = [1,2,3]
for i in Numbers:
A = "A" + str(i)
Z = "Z" + str(i)
df = "df" + str(i)
DF = "DF" + str(i)
A = len(df.loc[df['Column1'] <= DF['Column1'].iloc[2]])
Z = len(df.loc[df['Column1'] <= DF['Column1'].iloc[3]])
但這只是給了我相同的錯誤。最後我想是這樣的:
Numbers = [1,2,3]
for i in Numbers:
Ai = len(dfi.loc[dfi['Column1'] <= DFi['Column1'].iloc[2]])
Zi = len(dfi.loc[dfi['Column1'] <= DFi['Column1'].iloc[3]])
在哪裏,如果我輸入的輸出是等價的:
A1 = len(df1.loc[df1['Column1'] <= DF1['Column1'].iloc[2]])
Z1 = len(df1.loc[df1['Column1'] >= DF1['Column1'].iloc[3]])
A2 = len(df2.loc[df1['Column1'] <= DF2['Column1'].iloc[2]])
Z2 = len(df2.loc[df1['Column1'] >= DF2['Column1'].iloc[3]])
A3 = len(df3.loc[df3['Column1'] <= DF3['Column1'].iloc[2]])
Z3 = len(df3.loc[df3['Column1'] >= DF3['Column1'].iloc[3]])
的可能的複製[你怎麼能動態地通過一個while循環創建Python中的變量?(http://stackoverflow.com/questions/5036700/how-can-you-dynamically-create-variables-in -python-via-while-loop) –
@ŁukaszRogalski這將如何工作,我只需將「x」定義爲[26,45,46,47,51,58,64,65],然後鍵入「Ax = len(Hx.loc [Hx ['EKG-evt'] <= Ix [0] .iloc [0]])/ 10「? – Michael
如果您將數據幀與列一起提供,而不是將列分配給每個列的命名變量,那麼這將會更好。你所要求的要求是在看起來像變量名的字符串上使用'eval'或'exec'。所有這些努力僅僅是指那些已經在你沒有共享的另一個數據框中很好地表現出來的東西。我不會浪費時間去解決這個問題。但是,如果您對原始數據提出類似問題,我會考慮它。 – piRSquared