【问题标题】:How can I transform a code that split '|' into a function如何转换拆分“|”的代码变成一个函数
【发布时间】:2020-04-13 15:30:06
【问题描述】:

我有一个名为品牌的专栏。行看起来像这样

 |Brands|

|Gucci|Prada|
|Versace|Levis|Adidas|
|Champion|Diesel|Nike|

我有一个分割“|”的代码来自列品牌。

split_columns=['Brands']

for brand in split_brands:
    brands_data[brand]=brands_data[brand].apply(lambda x: x.split('|'))

该代码运行良好并拆分“|”。

我的问题是:

如何将该代码转换为函数。我想学习这样做。

【问题讨论】:

    标签: python python-3.x pandas python-2.7


    【解决方案1】:

    这样做

    def func(split_brands):
        for brand in split_brands:
            brands_data[brand]=brands_data[brand].apply(lambda x: x.split('|'))
    

    【讨论】:

      【解决方案2】:

      我将使用Google Doc String Format 并转换您的代码。重要的是给你的函数和参数命名一些可以理解的东西,这样它们就可以很容易被理解和解释


      def split_columns(brands, brands_data):
          """Used to split column string on the `|` character
      
          Args:
              brands (str): String containing brand names separated
                  by `|` character to be seperated
              brands_data (pandas df column): Dataframe column containing the information
      
          Returns:
              The updated dataframe column
          """    
      
          for brand in brands:
              brands_data[brand]=brands_data[brand].apply(lambda x: x.split('|'))
      
          return brands_data
      

      话虽如此,我觉得这里有些不对劲。

      如果您只是传入一个列,而您想要做的就是将该列取出,这样每个条目现在都是一个嵌套列表...

      '1|Versace|Levis|Adidas|' --> ['1','Versace','Levis','Adidas']

      最简单的方法是不使用函数,直接调用.apply()


      假设一个名为 df 的数据框和一个名为 Brands

      的数据框行
      >>>df
                          Brands
      0           0|Gucci|Prada|
      1  1|Versace|Levis|Adidas|
      2  2|Champion|Diesel|Nike|
      
      >>>df["Brands"] = df["Brands"].apply(lambda row: row.split('|'))
      >>>df
                                Brands
      0            [0, Gucci, Prada, ]
      1  [1, Versace, Levis, Adidas, ]
      2  [2, Champion, Diesel, Nike, ]
      

      希望此澄清对您有所帮助

      【讨论】:

      • 我认为我错过的事情是我忘记在这里写一个相等:split columns=['Brands']
      • 这是有道理的。如果我的回答有帮助,或者您认为它会帮助其他人,请确保单击检查。如果不能随意回答您的问题,然后选择它,以便人们知道在哪里寻找答案。 :)
      • 我有一个问题,我收到一个属性错误。 “float”对象没有“split”属性。这里:brands_data[brand]=brands_data[brand].apply(lambda x: x.split('|')) 。在这种情况下我该怎么办?
      • 这是因为在brands_data 的某处有一个brads_data[brand],它是一个浮点数(带小数的数字)。尝试打印出你所有的 brands_data[brand] 并寻找不是字符串的东西(看起来不像“0|Gucci|Prada|”或类似的东西)。作为一种快速的解决方法,您可以将代码更改为此...但又感觉很奇怪... ---> brands_data[brand]=brands_data[brand].apply(lambda x: str(x).split('|')) 这只是在运行 split 命令之前强制类型为字符串.这是一个创可贴,但它应该修复错误。希望有帮助!
      • 非常感谢!!您的解决方案解决了问题。金牌给你!
      猜你喜欢
      • 2022-10-14
      • 1970-01-01
      • 2015-05-20
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 2020-02-15
      相关资源
      最近更新 更多