【问题标题】:loop over columns in dataframes python循环数据框python中的列
【发布时间】:2021-08-13 00:07:23
【问题描述】:

我想遍历特定数据框中的 2 列,我想通过列的名称访问数据,但它在第 3 行给了我这个错误(类型错误)

i=0
for name,value in df.iteritems():
 
  q1=df[name].quantile(0.25)
  q3=df[name].quantile(0.75)
  IQR=q3-q1
  min=q1-1.5*IQR
  max=q3+1.5*IQR
  minout=df[df[name]<min]
  maxout=df[df[name]>max]
  new_df=df[(df[name]<max) & (df[name]>min)]
  i+=1
  if i==2:
    break

【问题讨论】:

  • 请添加足够大的df 样本以重现错误。另请提供您希望实现的输出示例。

标签: python pandas dataframe data-analysis exploratory-data-analysis


【解决方案1】:

您似乎想根据 1.5*IQR 规则排除异常值。这是一个更简单的解决方案:

输入虚拟数据:

import numpy as np
np.random.seed(0)
df = pd.DataFrame({'col%s' % (i+1): np.random.normal(size=1000)
                   for i in range(4)})

去除异常值(保留数据:Q1-1.5IQRIQR):

Q1 = df.iloc[:, :2].quantile(.25)
Q3 = df.iloc[:, :2].quantile(.75)
IQR = Q3-Q1

non_outliers = (df.iloc[:, :2] > Q1-1.5*IQR) & (df.iloc[:, :2] < Q3+1.5*IQR)

new_df = df[non_outliers.all(axis=1)]

输出:

【讨论】:

    【解决方案2】:

    类型错误的发生可能有很多原因,因此最好添加部分 DF 以尝试理解问题。

    还可以使用iterrows() 函数循环遍历列:

    import pandas as pd
    
    df = pd.read_csv('filename.csv')
        
    for _, content in df.iterrows():
        print(content['columnname']) #add the name of the columns you want to loop over
    

    更多信息请参考以下链接

    https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.iterrows.html#pandas.DataFrame.iterrows

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-08
      • 2019-03-31
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      相关资源
      最近更新 更多