max*_*max 7 python database-normalization pandas
我在平面文件中输入数据.我想通过将它们分成表来规范化这些数据.我可以巧妙地做到这一点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
Run Code Online (Sandbox Code Playgroud)
我想创建两个DataFrame:
ItemId ItemDescription
1 scroll of Sneak
2 scroll of Invisibile
Run Code Online (Sandbox Code Playgroud)
和
ItemId ClientId PriceQuoted
1 1 10
1 2 12
1 3 13
2 2 2500
2 4 2200
Run Code Online (Sandbox Code Playgroud)
如果pandas
对于最简单的情况只有一个很好的解决方案(规范化导致2个表具有多对一关系 - 就像上面的例子一样),它可能足以满足我当前的需求.但是,我将来可能需要一个更通用的解决方案.
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1389 次 |
最近记录: |