【问题标题】:python pandas wildcard? Replace all values in df with a constantpython pandas通配符?用常数替换 df 中的所有值
【发布时间】:2015-02-27 06:42:37
【问题描述】:

我有一个df 并想制作一个大小相同但包含所有1s 的new_df。符合以下精神的东西:new_df=df.replace("*","1")。我认为这比从头开始创建新的 df 更快,因为我需要获取尺寸,用1s 填充它,然后复制所有标题。除非我错了。

【问题讨论】:

    标签: python pandas wildcard


    【解决方案1】:

    df_new = pd.DataFrame(np.ones(df.shape), columns=df.columns)

    import numpy as np
    import pandas as pd
    
    d = [
        [1,1,1,1,1],
        [2,2,2,2,2],
        [3,3,3,3,3],
        [4,4,4,4,4],
        [5,5,5,5,5],
    ]
    
    cols = ["A","B","C","D","E"]
    
    %timeit df1 = pd.DataFrame(np.ones(df.shape), columns=df.columns)
    10000 loops, best of 3: 94.6 µs per loop
    
    %timeit df2 = df.copy(); df2.loc[:, :] = 1
    1000 loops, best of 3: 245 µs per loop
    
    %timeit df3 = df * 0 + 1
    1000 loops, best of 3: 200 µs per loop
    

    【讨论】:

      【解决方案2】:

      其实很简单。

      import pandas as pd
      
      d = [
          [1,1,1,1,1],
          [2,2,2,2,2],
          [3,3,3,3,3],
          [4,4,4,4,4],
          [5,5,5,5,5],
      ]
      
      cols = ["A","B","C","D","E"]
      
      df = pd.DataFrame(d, columns=cols)
      print df
      
      print "------------------------"
      
      df.loc[:,:] = 1
      print df
      

      结果:

         A  B  C  D  E
      0  1  1  1  1  1
      1  2  2  2  2  2
      2  3  3  3  3  3
      3  4  4  4  4  4
      4  5  5  5  5  5
      ------------------------
         A  B  C  D  E
      0  1  1  1  1  1
      1  1  1  1  1  1
      2  1  1  1  1  1
      3  1  1  1  1  1
      4  1  1  1  1  1
      

      显然,df.loc[:,:] 意味着您定位所有列中的所有行。如果你想要一个新的数据框,只需使用 df2 = df.copy() 或其他东西。

      【讨论】:

        猜你喜欢
        • 2021-07-02
        • 2018-11-11
        • 2022-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-05
        • 2018-03-18
        • 1970-01-01
        相关资源
        最近更新 更多