【问题标题】:Define a column type as 'list' in Pandas在 Pandas 中将列类型定义为“列表”
【发布时间】:2016-09-05 04:49:40
【问题描述】:

我有一个熊猫数据框 df。我希望 df 由 3 列组成:第一列是品牌名称(字符串),第二列是整数列表,第三列是浮点数列表。因此,对于每个品牌,我都有两个列表,我想将它们全部放在一个数据框中,以便根据品牌名称轻松访问不同的列表。

我有:

count = [1,5,198,0,0,35]
brand = 'Nike'

为了将计数列表放入与“Nike”行对应的“计数”列中,我尝试了以下操作:

df[df['brand']==brand].loc[0,'count'] = count
df[df['brand']==brand]['count'] == count
df[df['brand']==brand]['count'].loc[0] == count

这些都不起作用,我得到 ValueError: Must have equal len keys and value when setting with an iterableA value is trying to be set on a copy of a slice from a DataFrame 并且 df 没有任何变化。

如何将列表写入 pandas 数据框单元格?

【问题讨论】:

    标签: python list pandas


    【解决方案1】:

    您可以使用您的品牌作为列名:

    import pandas as pd
    
    df = pd.DataFrame({'Nike' : [[1,5,198,0,0,35],[0.5,0.3,0.2]]},index = ['count','floats'])
    

    然后您可以像这样添加新品牌:

    df['Puma'] = [[1,2,3],[0.1,0.2]]
    

    你会得到这个数据框:

            Nike                    Puma
    count   [1, 5, 198, 0, 0, 35]   [1, 2, 3]
    float   [0.5, 0.3, 0.2]         [0.1, 0.2]
    

    那么访问值真的很简单。

    【讨论】:

      【解决方案2】:

      在我看来,您正在构建错误的数据模型。 该模型不是第一范式(1NF),使用它会遇到很多麻烦。 请尝试使用标准化模型。

         Brand     price
      0  Nike     50.0
      1  Nike     60.0
      2  Nike     70.0
      3  Puma     30.0
      4  Puma     100.0
      

      您可以轻松地从此模型中获取任何计算值。

      【讨论】:

        【解决方案3】:

        您可以这样创建它。类型为object

        In [254]: df=pd.DataFrame({'Brand':['Nike','Puma'],
        'count':[[1,2,3],[0,0]],'price':[[50.]*3,[100.]*2]})
        
        In [255]: df
        Out[255]: 
          Brand      count               price
        0  Nike  [1, 2, 3]  [50.0, 50.0, 50.0]
        1  Puma     [0, 0]      [100.0, 100.0]
        

        【讨论】:

          猜你喜欢
          • 2017-01-29
          • 2021-04-24
          • 1970-01-01
          • 2013-05-05
          • 2017-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多