【问题标题】:pandas: normalizing a DataFramepandas:规范化 DataFrame
【发布时间】:2012-08-21 20:22:15
【问题描述】:

我在一个平面文件中输入了数据。我想通过将其拆分为表格来规范化这些数据。我可以用pandas 巧妙地做到这一点吗?也就是说,通过将展平的数据读入DataFrame 实例,然后应用一些函数来获得生成的DataFrame 实例?

例子:

数据以 CSV 文件的形式在磁盘上提供给我,如下所示:

ItemId   ClientId   PriceQuoted  ItemDescription
1        1          10           scroll of Sneak
1        2          12           scroll of Sneak
1        3          13           scroll of Sneak
2        2          2500         scroll of Invisible
2        4          2200         scroll of Invisible

我想创建两个 DataFrame:

ItemId   ItemDescription
1        scroll of Sneak
2        scroll of Invisibile

ItemId   ClientId   PriceQuoted
1        1          10
1        2          12
1        3          13
2        2          2500
2        4          2200

如果pandas 仅对最简单的情况有一个很好的解决方案(规范化导致 2 个具有多对一关系的表 - 就像上面的示例一样),它可能足以满足我当前的需求。不过,我将来可能需要更通用的解决方案。

【问题讨论】:

    标签: python pandas database-normalization


    【解决方案1】:
    In [30]: df = pandas.read_csv('foo1.csv', sep='[\s]{2,}')
    
    In [30]: df
    Out[30]:
       ItemId  ClientId  PriceQuoted      ItemDescription
    0       1         1           10      scroll of Sneak
    1       1         2           12      scroll of Sneak
    2       1         3           13      scroll of Sneak
    3       2         2         2500  scroll of Invisible
    4       2         4         2200  scroll of Invisible
    
    In [31]: df1 = df[['ItemId', 'ItemDescription']].drop_duplicates().set_index('ItemId')
    
    In [32]: df1
    Out[32]:
                ItemDescription
    ItemId
    1           scroll of Sneak
    2       scroll of Invisible
    
    In [33]: df2 = df[['ItemId', 'ClientId', 'PriceQuoted']]
    
    In [34]: df2
    Out[34]:
       ItemId  ClientId  PriceQuoted
    0       1         1           10
    1       1         2           12
    2       1         3           13
    3       2         2         2500
    4       2         4         2200
    

    【讨论】:

      猜你喜欢
      • 2013-09-06
      • 2019-03-15
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 2014-11-20
      • 2016-07-06
      • 2016-03-06
      • 2015-03-16
      相关资源
      最近更新 更多