我是第一次使用 Python,所以我幾乎沒有困難。
我有一個包含 6 列和 20 行的 csv 資料檔案,一些條目是“NaN”。我想要做的是一種互動,將考慮第一列與其他列(A 與 B、C、D、E 和 F),然后是第二列與所有其他列(B 與 C、D、E 和F) 等(即比較 6 列中的每一對可能的對),對于每對洗掉 NaN 條目(因此每對最終對的行數將不同)并計算線性回歸。
我可以通過“手動”考慮每一對來獲得我正在尋找的結果,但是由于我有很多 DataFrame 必須執行此程序,因此需要花費很多時間,所以我我希望有人能用更快的方法幫助我。
我的部分資料:
| A | B | C | D | E | F |
| 70.385 | 1316.0 | NaN | 1.84 | 1.021059e 37 | 1.284026e 41 |
| 13.183 | 800.0 | 11549.0 | 1.66 | 4.710032e 35 | Nan |
| 9.750 | NaN | NaN | 1.55 | 1.437108e 36 | 5.070657e 40 |
| 12.302 | NaN | 547.7 | 1.56 | 2.149507e 36 | 2.294859e 40 |
| NaN | 2784.2 | 29984.4 | 1.87 | NaN | 2.294859e 40 |
我能做的是:
import pandas as pd
from scipy.stats import linregress
df=data1.dropna(subset=['A','B'])
lr_AB=linregress(df['A'],df['B'])
我試圖獲得的是:每對的 LinregressResult(slope= ,intercept=, rvalue=, pvalue=, stderr=) 。那么,如何為每對可能的列迭代這兩個命令?
我的嘗試是這樣的,但沒有太多結果:
for i in range(len(data1.columns)-1):
if data1.iloc[:, :] is 'NaN':
df= data1.dropna()
print(df)
lr= linregress(df.iloc[:, i], df.iloc[:, i 1])
else:
print('no nan')
lr1= linregress(data1.iloc[:, i], data1.iloc[:, i 1])
太感謝了。
uj5u.com熱心網友回復:
假設您想使用scipy.stats's linregress,這里有一種方法可以做到這一點。并不比您的代碼效率高多少,因為它還會遍歷列的組合:
from scipy.stats import linregress
from itertools import combinations
for a, b in combinations(df, 2):
ab = df[[a, b]].dropna()
lr[(a, b)] = dict(zip(
'slope intercept r_value p_value std_err'.split(),
linregress(ab[a], ab[b])
))
lr[(a, b)]['n_points'] = ab.shape[0]
result = pd.DataFrame(lr).T
在您的示例資料上運行示例 -
>>> result
slope intercept r_value p_value std_err n_points
A B 9.020664e 00 6.810806e 02 1.000000 0.000000 0.000000e 00 2.0
C 1.248729e 04 -1.530709e 05 1.000000 0.000000 0.000000e 00 2.0
D 4.316155e-03 1.538532e 00 0.942012 0.057988 1.087230e-03 4.0
E 1.503028e 35 -4.016931e 35 0.984424 0.015576 1.898085e 34 4.0
B C 9.291100e 00 4.116120e 03 1.000000 0.000000 0.000000e 00 2.0
D 8.706011e-05 1.647796e 00 0.789115 0.421079 6.776741e-05 3.0
E 1.887517e 34 -1.462913e 37 1.000000 0.000000 0.000000e 00 2.0
C D 1.061987e-05 1.547701e 00 0.998360 0.036468 6.090086e-07 3.0
E -1.525732e 32 2.233071e 36 -1.000000 0.000000 0.000000e 00 2.0
D E 2.896150e 37 -4.429182e 37 0.869114 0.130886 1.165450e 37 4.0
A F 1.525539e 39 2.034718e 40 0.957112 0.187122 4.617784e 38 3.0
B F -7.182537e 37 2.229248e 41 -1.000000 0.000000 0.000000e 00 2.0
C F 0.000000e 00 2.294859e 40 0.000000 1.000000 0.000000e 00 2.0
D F 1.097658e 41 -1.308991e 41 0.382452 0.617548 1.875151e 41 4.0
E F 1.061306e 04 1.854240e 40 0.946081 0.210009 3.633822e 03 3.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399448.html
