【问题标题】:Pandas Dataframe For LoopPandas 循环数据框
【发布时间】:2018-08-23 13:47:19
【问题描述】:

我想用另一列的一部分替换熊猫数据框中的一列。到目前为止我所拥有的是:

for index, row in df.iterrows():
  File = df.at[row, 'FileName']
  df.at[row, 'NUMBER'] = File.split(".")[1]

理想情况下,这将遍历数据框的行并将数字列替换为 FileName 列的一部分

我收到错误:

ValueError: At based indexing on an integer index can only have integer indexers

我认为这与滥用 df.at[] 有关,但我不确定如何解决。

【问题讨论】:

    标签: python pandas for-loop


    【解决方案1】:

    不要循环 iterrows,因为 slow,最好使用 str.split 通过索引选择第二个列表:

    df['NUMBER'] = df['FileName'].str.split(".").str[1]
    

    如果需要更好的性能,或者使用list comprehension

    df['NUMBER'] = [x.split(".")[1] for x in df['FileName']]
    

    【讨论】:

    • 您的解决方案客观上比我正在做的更好。非常感谢您的帮助!
    【解决方案2】:

    如果您对错误感到疑惑

    df.at[row, 'NUMBER'] 更改为 df.at[index, 'NUMBER'] 它应该是 index 而不是 row 这是整个数据框

    应该是这样的

    for index, row in df.iterrows():
    
      df.at[index, 'NUMBER'] = row['FileName'].split(".")[1]
    

    for more info

    我更喜欢 jezrael 的解决方案

    【讨论】:

      【解决方案3】:

      我相信您正在寻找的是“split”与“expand=True”的结合。工作示例:

      import pandas as pd
      col_1 = ['abc', 'abc', 'bcd', 'bcd']
      col_2 = ['james.25', 'jane.23', 'andrew.15', 'jim.22']
      data = pd.DataFrame({'NUMBER': col_1, 'FileName': col_2})
      
      data['NUMBER'] = data['FileName'].str.split('.', expand=True)[1]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-01
        • 2016-04-25
        • 2022-01-20
        • 1970-01-01
        • 2019-07-08
        • 2021-04-11
        • 2015-02-08
        • 2020-08-25
        相关资源
        最近更新 更多