【问题标题】:Split and replace all strings in a pandas dataframe拆分和替换熊猫数据框中的所有字符串
【发布时间】:2020-05-13 17:36:19
【问题描述】:

我有一个大数据框,其中每一行都包含一个字符串。 我想将每个字符串分成几列,同时替换两种字符类型。

下面的代码可以完成这项工作,但在大型数据帧上速度很慢。有没有比使用 for 循环更快的方法?

import re
import pandas as pd

df = pd.DataFrame(['[3.4, 3.4, 2.5]', '[3.4, 3.4, 2.5]'])

df_new = pd.DataFrame({'col1': [0,0], 'col2': [0,0], 'col3': [0,0]})

for i in range(df.shape[0]):
    df_new.iloc[i, :] = re.split(',', df.iloc[i, 0].replace('[', '').replace(']', ''))

【问题讨论】:

    标签: python pandas dataframe replace split


    【解决方案1】:

    您的解决方案应该更改为 Series.str.stripSeries.str.split

    df1 = df[0].str.strip('[]').str.split(', ', expand=True).add_prefix('col')
    print(df1)
      col0 col1 col2
    0  3.4  3.4  2.5
    1  3.4  3.4  2.5
    

    如果性能很重要,请使用列表推导而不是 pandas 函数:

    df1 = pd.DataFrame([x.strip('[]').split(', ') for x in df[0]]).add_prefix('col')
    

    时间安排

    #20k rows
    df = pd.concat([df] * 10000, ignore_index=True)
    
    In [208]: %timeit df[0].str.strip('[]').str.split(', ', expand=True).add_prefix('col')
    61.5 ms ± 1.68 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
    
    In [209]: %timeit pd.DataFrame([x.strip('[]').split(', ') for x in df[0]]).add_prefix('col')
    29.8 ms ± 1.85 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      import pandas as pd
      df = pd.DataFrame(['[3.4, 3.4, 2.5]', '[3.4, 3.4, 2.5]'])
      
      df_new = df[0].str[1:-1].str.split(",", expand=True)
      df_new.columns = ["col1", "col2", "col3"]
      

      这个想法是首先摆脱[],然后用,拆分并扩展数据框。最后一步是重命名列。

      【讨论】:

      • 太好了,这比我的循环快得多!
      猜你喜欢
      • 2017-09-09
      • 2017-07-08
      • 2015-06-25
      • 2014-10-31
      • 2019-02-12
      • 2021-09-07
      • 1970-01-01
      • 2018-08-01
      相关资源
      最近更新 更多