我正試圖使用標準差從單列(然后從多列)中填充空單元格。我已經看到了幾個解釋,但到目前為止,還沒有看到任何直接的、與這個問題相關的解釋。預先感謝您的時間!
這是我的想法。
以下是我目前掌握的情況:
為了獲得隨機值,我首先計算了數學列的平均值:
為了獲得隨機值,我首先計算了數學列的平均值。
filename = os.path.join(os.path.dirname(__file__) ,'exam.csv')
data = pd.read_csv(filename)
math_mean = data['Math'].mean()
print(math_mean)
該的輸出是 73.625。
然后,我計算了標準差:
。math_std = data['Math'/span>].std()
print(math_std)
這給了我10.14097064951308的STD。
73-10 = 63。
73 10=83
基于上面的計算,我需要生成63和83之間的隨機值,并填入數學列的空單元格。我使用了np.random.randint()來獲得隨機值:
random_grades = np.random.randint(63, 83)
print(random_grades)
所以到目前為止一切正常,隨機值確實被插入到空單元格中。然而,它是相同的值重復出現的。
我使用了這樣的語法:
我使用了這樣的語法。
#Producing random age values
random_grades = np.random.randint(63.48, 83.76)
print(random_grades)
#Storing new random ages to variable(隨機年齡)
new_grades = data.Math.fillna(random_grades)
print(new_grades)
#Passing new values to table(new_grades)
data['Math'].fillna(new_grades,inplace=True)
print(data)
這是輸出:
0 79.0
1 82.0
2 85.0[/span
3 77.0 #隨機值
4 70.0
5 77.0 # 相同的隨機值
6 84.0
7 67.0
9 63.0
10 59.0
如果我試圖在random_grades = np.random.randint(63.48, 83.76, size=5)中添加引數size=,我就會得到一個錯誤:
Traceback (most recent call last):
檔案 "c:/Users/Desktop/tiny.py", 行 88, in < module>
new_grades = data.Math.fillna(random_grades)
檔案 "C:UserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagespandascoreseries.py"/span>, 行4433, in fillna
return super().fillna(
檔案"C:UserAppDataLocalPackagesPythonSoftwareFoundation.Python.3 .8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagespandascoregeneric.py", 行 6397, in fillna
raise TypeError(
型別錯誤。"value"引數必須是標量,dict or系列,但你傳遞了一個"ndarray"。
我錯過了什么?
我錯過了什么?
uj5u.com熱心網友回復:
第一個想法是測驗缺失值,并通過numpy.random.randint中的N引數來分配隨機值計數的長度(通過True=1和False=0):
mean = data['Math'/span>].mean()
std = data['Math'].std()。
mask = data['Math'].isna()
data.loc[mask, 'Math'] = np.random.randint(mean - std, mean std, mask.sum()
你的解決方案是類似的,只是將numpy陣列轉換為Series,并為缺失的值設定索引:
mean = data['Math'/span>].mean()
std = data['Math'].std()
#測驗缺失值。
mask = data['Math'].isna()
#Producing random age values隨機年齡值
random_grades = np.random.randint(mean - std, mean std, mask.sum()
print(random_grades)
#convert array to Series and replace missing values[/span].
data['Math'] = data.Math.fillna(pd.Series(random_grades, index=data.index[mask))
print(data)
uj5u.com熱心網友回復:
嘗試使用apply獲得不同的值
df.Math = df.Math.apply(lambda x: np.random.randint(63.48, 83.76) if pd.isna(x) else x)
uj5u.com熱心網友回復:
np.random.randint(63.48, 83.76)
生成一個單一的值,而-
np.random.randint(63.48, 83.76, 5)
在指定的范圍內生成5個隨機值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/323849.html
標籤:

