【问题标题】:Looping Pandas Column Names To Create New Data Frame循环 Pandas 列名以创建新数据框
【发布时间】:2018-12-03 10:36:00
【问题描述】:

我正在寻求循环数据框中的列,当列名符合条件时创建一个新数据框和/或将其添加到现有数据框中。例如 - 我当前的数据框具有以下列名称:

打开 高的 低的 体外受精 体积 打开 高的 低的 EWH 体积 打开 高的 低的 印地 体积 打开 高的 低的 电子工作组 体积 打开 高的 低的 恩泽 音量

我想要一个循环,它可以找到 IVV、EWH、INDY、EWG 和 ENZL,并将它们添加到它们自己的数据帧中。

我尝试了以下方法:

Indexlist = ['IVV', 'EWH', 'INDY', 'EWG', 'ENZL']

尝试删除值列:

for column in data:
    print(column)
    if column != Indexlist:
        data.drop([column], axis=0))

尝试删除列

for column in data:
    print(column)
    if column != Indexlist:
        del data[column]

尝试选择列

data_sample = data[column].isin(Indexlist)

所有这些方法都在抛出错误。

【问题讨论】:

  • data[Indexlist] 工作怎么样?

标签: python pandas dataframe indexing


【解决方案1】:

您可以使用 pd.Index.isinpd.DataFrame.loc 进行布尔索引:

data_sample = data.loc[:, data.columns.isin(Indexlist)]

或者直接索引,如果您事先知道所有列表元素都作为列存在于您的数据框中:

data_sample = data[Indexlist]

【讨论】:

    【解决方案2】:

    我认为需要通过str.contains 使用正则表达式检查列名的子字符串 - 通过|OR 加入列表的所有值:

    data1 = data.loc[:, data.columns.str.contains('|'.join(Indexlist))]
    

    如果需要按列名选择使用子集:

    data1 = data[Indexlist]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2016-04-20
      相关资源
      最近更新 更多