我正在处理一些数据存储。但是,在预处理之后,数据就像这样,例如:
-1|news.cnet.com|Technology News - CNET News|-1|-1
-1|news.google.com|Google News|-1|-1
-1|www.bbc.co.uk|BBC News - Home|-1|-1
-1|www.cnn.com|CNN.com|-1|-1
-1|www.news.com.au|News.com.au|-1|-1
1|news.google.com|-1|2|5,156,672
2|www.cnn.com|-1|71|325,362
3|www.news.com.au|-1|569|74,584
4|www.bbc.co.uk|-1|49|442,302
5|news.cnet.com|-1|107|187,705
格式类似于INDEX|URL|TITLE|RANK|SLI
。
值-1
表示列没有特定值。
可能存在具有相同URL
的重复条目,合并它们将完成记录。
是否有一个巧妙的技巧和提示,可以快速将这些记录合并为一个完整的?我不想为所有行迭代和循环重复以找到重复的行并合并。
修改 期望的输出如下:
1|news.google.com|Google News|2|5,156,672
2|www.cnn.com|CNN.com|71|325,362
3|www.news.com.au|News.com.au|569|74,584
4|www.bbc.co.uk|BBC News - Home|49|442,302
5|news.cnet.com|Technology News - CNET News|107|187,705
编辑2:
通过使用Panda,如下面建议的root
,我可以合并数据列:
from pandas import *
frame = read_csv(r'data.txt', sep='|', names=['index', 'url', 'title', 'rank', 'sli'])
mask = frame['index'].map(lambda x: x > 0)
frame1 = frame[mask].set_index('url')
frame2 = frame[~mask].set_index('url')
frame1.title = frame2.title
frame1.set_index('index')
print frame1
但是,有没有使用任何第三方库的快速方法?
答案 0 :(得分:3)
您可以将数据加载到pandas DataFrame
并处理它。
from pandas import *
In [360]: frame=read_csv(r'C:\Python26\test.csv',sep='|', names=['index', 'url', 'title','rank','sli'])
In [361]: print frame
index url title rank sli
0 -1 news.cnet.com Technology News - CNET News -1 -1
1 -1 news.google.com Google News -1 -1
2 -1 www.bbc.co.uk BBC News - Home -1 -1
3 -1 www.cnn.com CNN.com -1 -1
4 -1 www.news.com.au News.com.au -1 -1
5 1 news.google.com -1 2 5,156,672
6 2 www.cnn.com -1 71 325,362
7 3 www.news.com.au -1 569 74,584
8 4 www.bbc.co.uk -1 49 442,302
9 5 news.cnet.com -1 107 187,705
In [362]: mask = frame['index'].map(lambda x: x>0)
In [363]: frame = frame[mask]
In [364]: print frame
index url title rank sli
5 1 news.google.com -1 2 5,156,672
6 2 www.cnn.com -1 71 325,362
7 3 www.news.com.au -1 569 74,584
8 4 www.bbc.co.uk -1 49 442,302
9 5 news.cnet.com -1 107 187,705
如果您有更多重复项,请使用:
df.drop_duplicates()
此外,请注意,在您从index
删除了共和党后,您可以“重新索引”:
In [372]: print frame.set_index('index')
url title rank sli
index
1 news.google.com -1 2 5,156,672
2 www.cnn.com -1 71 325,362
3 www.news.com.au -1 569 74,584
4 www.bbc.co.uk -1 49 442,302
5 news.cnet.com -1 107 187,705