【发布时间】:2021-12-31 12:39:23
【问题描述】:
我是第一次使用 Python,所以没有什么困难。
我有一个包含 6 列和 20 行的 csv 数据文件,其中一些条目是“NaN”。我想要做的是一种交互,它会考虑第一列与其他列(A vs B、C、D、E 和 F),然后是第二列与所有其他列(B 与 C、D、E 和F) 等(即比较每对可能的 6 列),为每对删除 NaN 条目(因此每对最终对的行数会不同)并计算线性回归。
我可以通过“手动”考虑每一对来获得我正在寻找的结果,但是由于我有相当多的 DataFrames 需要执行此过程,因此需要很多时间,所以我希望有人能用更快的方法帮助我。
我的部分数据:
| 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])
非常感谢。
【问题讨论】:
-
请提供minimal reproducible example,包括一个小的输入示例数据和相应的预期结果。
-
@PierreD 希望我的编辑足够好
-
干得好,谢谢。您可以更进一步,让您的数据更易于复制/粘贴(这样我们就可以更轻松地开始帮助您)。此外,您还没有准确定义
linregress,如果您显示预期结果是什么(以及以什么形式),这将有所帮助。
标签: python pandas loops linear-regression