3 回答

TA貢獻1744條經驗 獲得超4個贊
在循環中或通過列表理解將值附加到list并且僅使用一次concat:
a = "SELECT id FROM USER WHERE time >'2018-03-01'"
dataa = pd.read_sql_query(a, con=engine)
dfs = []
for userid in dataa:
x=f"SELECT idbody FROM col1 WHERE user_id='{userid}'"
data = pd.read_sql_query(x,con = engine)
dfs.append(data)
df = pd.concat(dfs, ignore_index=True)
dfs = [pd.read_sql_query(f"SELECT idbody FROM col1 WHERE user_id='{userid}'",con = engine)
for userid in dataa]
df = pd.concat(dfs, ignore_index=True)

TA貢獻1884條經驗 獲得超4個贊
您還可以使用concat:
a = "SELECT id FROM USER WHERE time >'2018-03-01'"
dataa = pd.read_sql_query(a, con=engine)
print(dataa)
df = pd.DataFrame()
for userid in dataa:
x=f"SELECT idbody FROM col1 WHERE user_id='{userid}'"
data = pd.read_sql_query(x,con = engine)
df = pd.concat([df_all, data])
現在:
print(df)
將是所需的輸出。

TA貢獻1780條經驗 獲得超1個贊
我假設您獲得相同數量的列,并且這些列具有相同的名稱。例如這是基本思想:
df = pd.DataFrame() # this will hold your all data
df1 = pd.DataFrame([(1, 2, 3)], columns=['a', 'b', 'c']) # 1st iteration data
df2 = pd.DataFrame([(11, 22, 33)], columns=['a', 'b', 'c']) # 2nd iteration data
df3 = pd.DataFrame([(111, 222, 333)], columns=['a', 'b', 'c']) # 3rd iteratin data etc.
for data in [df1, df2, df3]:
df = df.append(df1)
a b c
0 1 2 3
1 11 22 33
2 111 222 333
你需要做的是:
a = "SELECT id FROM USER WHERE time >'2018-03-01'"
dataa = pd.read_sql_query(a, con=engine)
print(dataa)
df_all = pd.DataFrame() # create an empty df to store all returns
for userid in dataa:
x=f"SELECT idbody FROM col1 WHERE user_id='{userid}'"
data = pd.read_sql_query(x,con = engine)
df_all = df_all.append(data) # update df with new dframes
添加回答
舉報