【问题标题】:Replace part of pandas row and make a new column替换熊猫行的一部分并创建一个新列
【发布时间】:2021-12-30 08:29:30
【问题描述】:

我有以下熊猫数据框。

d = {'col1': [1, 2,3,4,5,60,0,0,6,3,2,4],'col3': [1, 22,33,44,55,60,1,5,6,3,2,4],'Name': ['22a| df a1asd_V1', 'xcd a2a_sd_V3','23vg aa_bsd_V1','22a| df a1asd_V1|5mo','a3as  d_V1','aa b_12mo','aasd_V4','aa_6mo_bsd','aa_adn sd_V15',np.nan,'aasd_V12','aasd120Abs'],'Date': ['2021-06-13', '2021-06-13','2021-06-13','2021-06-14','2021-06-15','2021-06-15','2021-06-13','2021-06-16','2021-06-13','2021-06-13','2021-06-13','2021-06-16']}
dff = pd.DataFrame(data=d)
dff
    col1    col3    Name                    Date        
0   1       1       22a| df a1asd_V1        2021-06-13
1   2       22      xcd a2a_sd_V3           2021-06-13
2   3       33      23vg aa_bsd_V1          2021-06-13
3   4       44      22a| df a1asd_V1|5mo    2021-06-14
4   5       55      a3as d_V1               2021-06-15
5   60      60      aa b_12mo               2021-06-15
6   0       1       aasd_V4                 2021-06-13
7   0       5       aa_6mo_bsd              2021-06-16
8   6       6       aa_adn sd_V15           2021-06-13
9   3       3       NaN                     2021-06-13
10  2       2       aasd_V12                2021-06-13
11  4       4       aasd120Abs              2021-06-16

我想替换 _, |进入太空,如果有 5 个月、6 个月、12 个月 .. 进入 5 个月、6 个月、12 个月,就像 Name 列那样,并创建一个名为 New Name 的新列。就像下面的数据框。

    col1    col3    Name                    Date             NewName
0   1       1       22a| df a1asd_V1        2021-06-13      22a  df a1asd V1
1   2       22      xcd a2a_sd_V3           2021-06-13      xcd a2a sd V3
2   3       33      23vg aa_bsd_V1          2021-06-13      23vg aa bsd V1
3   4       44      22a| df a1asd_V1|5mo    2021-06-14      22a df a1asd V1 5 months
4   5       55      a3as d_V1               2021-06-15      a3as d V1
5   60      60      aa b_12mo               2021-06-15      aa b 12 months  
6   0       1       aasd_V4                 2021-06-13      aasd V4     
7   0       5       aa_6mo_bsd              2021-06-16      aa 6 months bsd 
8   6       6       aa_adn sd_V15           2021-06-13      aa adn sd V15
9   3       3       NaN                     2021-06-13      NaN 
10  2       2       aasd_V12                2021-06-13      aasd V12
11  4       4       aasd120Abs              2021-06-16      aasd120Abs

是否可以在 lambda 函数中做到这一点?由于我的实际数据框有超过 100 万条记录,因此我需要一些高效的工作。

提前致谢!任何想法都会很合适。

【问题讨论】:

    标签: python pandas string dataframe


    【解决方案1】:
    df['NewName'] = [x.replace('|', '').replace('_', '') for x in df['Name']]
    

    【讨论】:

      【解决方案2】:

      你可以使用pd.Series.replace:

      print (df["Name"].replace({"[|_]":" ", "(\d+)mo":"\\1 months"}, regex=True))
      
      0              22a  df a1asd V1
      1                 xcd a2a sd V3
      2                23vg aa bsd V1
      3     22a  df a1asd V1 5 months
      4                    a3as  d V1
      5                aa b 12 months
      6                       aasd V4
      7               aa 6 months bsd
      8                 aa adn sd V15
      9                           NaN
      10                     aasd V12
      11                   aasd120Abs
      Name: Name, dtype: object
      

      【讨论】:

      • 感谢您的快速回复。欣赏!!
      【解决方案3】:

      这应该可行:

      dff["NewName"] = dff["Name"].apply(lambda x: x.replace("|"," ").replace("_"," "))
      

      【讨论】:

      • 感谢您的快速回复。欣赏它!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2018-12-24
      • 2021-08-21
      • 1970-01-01
      相关资源
      最近更新 更多