【问题标题】:substring of an entire column in pandas dataframe熊猫数据框中整个列的子字符串
【发布时间】:2016-07-30 02:03:48
【问题描述】:

我有一个熊猫数据框“df”。在这个数据框中,我有多个列,其中一个我必须子串。 假设列名是“col”。 我可以像下面那样运行“for”循环并将列子字符串化:

for i in range(0,len(df)):
  df.iloc[i].col = df.iloc[i].col[:9]

但我想知道,如果有一个选项我不必使用“for”循环,而是直接使用属性来执行。我有大量数据,如果我这样做,数据将需要很长时间。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用带方括号的str 访问器:

    df['col'] = df['col'].str[:9]
    

    str.slice:

    df['col'] = df['col'].str.slice(0, 9)
    

    【讨论】:

    • 这给了我可怕的SettingWithCopyWarning:
    • 很好的解决方案!但很好奇在大型数据集上哪个更快...以及与df['col'] = [x[:9] for x in df['col']] 相比如何
    • 您可以使用建议的解决方案和pd.options.mode.chained_assignment = None # default='warn' 来消除警告。或者,您可以看看这些主题并浪费几分钟的时间:link
    【解决方案2】:

    我需要将 nn.n% 形式的单列字符串转换为浮点数。我需要从每一行的元素中删除 % 。参加数据框有两列。

    attend.iloc[:,1:2]=attend.iloc[:,1:2].applymap(lambda x: float(x[:-1]))
    

    它是对原始答案的扩展。在我的情况下,它需要一个数据框并将一个函数应用于特定列中的每个值。该函数删除最后一个字符并将剩余的字符串转换为浮点数。

    【讨论】:

    • 很难判断这是否是问题的答案。
    【解决方案3】:

    如果该列不是字符串,使用 astype 进行转换:

    df['col'] = df['col'].astype(str).str[:9]

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 2019-03-14
      • 2022-07-27
      • 1970-01-01
      • 2018-06-28
      • 2018-01-02
      • 2019-01-17
      • 2021-11-15
      • 1970-01-01
      相关资源
      最近更新 更多