【问题标题】:Pandas:iterate through the dataframe and apply changes with conditionsPandas:遍历数据框并根据条件应用更改
【发布时间】:2020-04-21 20:03:47
【问题描述】:

我必须遍历 column=0,如果在我的 column=0 中找到任何整数,如 2010、2018、2017 等,我必须将其分配给 column=0 中的所有值作为年份。

PS:-column=0 是一个对象数据类型。

我的 DF: 0 1
南银行 国家银行轴心银行 南ICICI 南PNB 2010年KYB 南印度工业 南卡鲁尔

我想要的输出: 0 1
2010 银行 2010 轴心银行 2010 年国际工业联合会 2010 年国家银行 2010年KYB 2010 印度工业 2010卡鲁尔

【问题讨论】:

  • 欢迎来到 StackOverflow。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题:)
  • 如果在National Banks 之后的Nan2015,那么预期的输出是什么?
  • 首先,感谢 jezrael 抽出宝贵时间...我只想用我得到的整数值(例如 2010 年)替换 column=0 中的所有值(包括 nan、国家银行)。

标签: python-3.x pandas dataframe data-science data-cleaning


【解决方案1】:

通过to_numeric将列转换为数字,然后将range之外的所有数字转换为NaNs的缺失值Series.whereSeries.isin掩码:

s = pd.to_numeric(df[0], errors='coerce')
df[0] = s.where(s.isin(range(2010, 2020)))
print (df)
        0          1
0     NaN      Banks
1     NaN  Axis Bank
2     NaN      ICICI
3     NaN        PNB
4  2010.0        KYB
5     NaN  Indus Ind
6     NaN      Karur

【讨论】:

  • 上述答案部分有用......我想用我得到的任何整数值替换 column=0 值(例如 2010、2011 等)......我们应该使用 iteritems()吗?
  • @HarshaRagyari - 列中总是只有一个独特的年份?如果是,则使用df[0] = s.where(s.isin(range(2010, 2020))).dropna().iat[0]
  • @HarshaRagyari - 如果可能有多个值,那么 df[0] = s.where(s.isin(range(2010, 2020))).ffill().bfill() 应该会有所帮助。
  • Ty,我现在可以得到我想要的输出了.. t=pd.to_numeric(df[0],errors='coerce') t df[0]=t.where(t. isin(range(2005,2020))).dropna().values[0] df[0]
猜你喜欢
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2020-11-21
  • 2020-12-01
  • 1970-01-01
  • 2014-11-21
相关资源
最近更新 更多