我有200個資料集,我想用iloc和value函式在這些資料集中迭代挑選隨機行并將其添加到另一個資料集(空資料集)。然而,當我試圖運行單個命令來檢查隨機行是否有任何值時,它給出了一個錯誤。 AttributeError: 'str' object has no attribute 'iloc'.
我的代碼如下:
Tdata = np.zeros([20, 6] )
k = 0
for j in range(200)。
for j1 in range(0, 20) 。
Tdata[k:k 1,:] = (('dataset' j)).iloc[random.randint(100) ] .value
k = 1
('dataset' j)基本上是在選擇不同的資料集。我的資料集的名稱是dataset0,dataset1,dataset2......,那里已經定義了。
uj5u.com熱心網友回復:
你的代碼中存在多個問題。
1. 使用str來代替實際的DataFrame變數
。
你試圖在一個字串.iloc上使用dataframe1,例如。這是行不通的,因為str沒有.iloc的屬性,正如錯誤為你所讀的那樣。
由于你想使用DataFrame變數名,你可能需要使用eval()來解釋字串為一個變數名。注意:在使用eval()時要格外小心。請仔細閱讀使用eval()的危險。
2.從每個DataFrame中取樣20行。
如果你試圖通過使用for j1 in range(0, 20):和random.randint(100)來獲得20行,有一個更好的方法來避免這種迭代。相反,你需要的是使用random.randint(0,100,(n,)來獲得n個隨機索引。在這種情況下random.randint(0,100,(20,)
或者一個更好的方法是簡單地使用df.sample(20)來從一個給定的資料框架中抽取20行。
3.在資料框架的視圖上強制更新
。最好使用一個不同的appraoch,而不是用Tdata[k:k 1,:] == ...在資料框架的視圖上強制更新。由于你想結合資料框架,它最好只是將它們收集在一個串列中并將它們傳遞給pd.concat,這將是更有用的。
下面是帶有簡單設定的示例代碼,它應該有助于引導你找到你正在尋找的東西。
import pandas as pd
import numpy as np
dataset0 = pd.DataFrame(np.random.random((100,3) )
dataset1 = pd.DataFrame(np.random.random((100,3) )
dataset2 = pd.DataFrame(np.random.random((100,3) )
dataset3 = pd.DataFrame(np.random.random((100,3) )
##使用隨機.randint。
##samples = [eval('dataset' str(i)).iloc[np.random.randint(0,100,(3,)) ] for i in range(4)]
##使用df.sample()
samples = [eval('dataset' str(i)) 。 sample(3) for i in range(4) ]
#Change -
##1. 每個資料幀的3到20個樣本的3到20。
##2.range(4) to range(200) to work with 200 dataframes。
output = pd.concat(samples)
print(output)
0 1 2
42 0.372626 0.445972 0.030467[/span]。
20 0.376201 0.445504 0.835735[/span]。
56 0.214806 0.083550 0.582863[/span
85 0.691495 0.346022 0.619638[/span]。
24 0.290397 0.202795 0.704082[/span]。
16 0.112986 0.013269 0.903917[/span]。
51 0.521951 0.115386 0.632143[/span]。
73 0.946870 0.531085 0.437418[/span]。
98 0.745897 0.718701 0.280326[/span]。
56 0.679253 0.010143 0.124667[/span]。
4 0.028559 0.769682 0.737377[/span]。
84 0.857553 0.866464 0.827472
4.存盤200個資料幀?
最后但并非最不重要的是,你應該問自己,為什么你要將200個資料框作為單獨的變數來存盤,只是為了從每個變數中抽取一些行。
為什么不嘗試 -
- 迭代地讀取每個檔案 從每個檔案中取樣行。
- 將它們存盤在一個資料幀的串列中 。
pd.concat一旦你完成了對200個檔案的迭代
......而不是保存200個資料幀,然后做同樣的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/323850.html
標籤:
