加油努力,

pandas处理数据1

读文件

pd.read_csv('path/to/file.txt',header=0,names='ab',index_col=0)

names Columns这个可以不写,制定索引列是第一列,这样就没有序号

写文件

dataframe.to_csv('d:/python/end.txt')

dataframe

类似于二维列表
充分利用map函数

df.a=df.a.map(function)

修改一列的值

筛选列

new_dataframe = df[df.a!='']

这种办法可以筛选得到新的df
自动迭代

处理

def getPhoneNumFromFile(fobj):
    regex = re.compile(r'1\d{10}', re.IGNORECASE)
    phonenums = re.findall(regex, fobj)
    #print phonenums
    if len(phonenums)==1:
        return phonenums[0]
    else:
        return ''

充分体现了轮子的重要性
如果是一个熟练人员几分钟就搞定了

#! /usr/bin/env python
# -*- coding:utf-8   -*-
# __author__ == "xpro"
import pandas as pd
import re,optparse,os

def getPhoneNumFromFile(fobj):
    regex = re.compile(r'1\d{10}', re.IGNORECASE)
    phonenums = re.findall(regex, fobj)
    #print phonenums
    if len(phonenums)==1:
        return phonenums[0]
    else:
        return ''

def main():
    p = optparse.OptionParser()

    p.add_option('--source', '-s', default="d:/python/telpwd.txt", help=u'要处理的文件路径') #应该对文件进行验证判断是否存在
    p.add_option('--dist', '-d', default="d:/python/dis.txt", help=u'输出文件路径') #验证目录是否可以写
    #如果用户使用的是默认的应该给出提示
    options, arguments = p.parse_args()
    df = pd.read_csv(options.source, header = 0)

    df.a = df.a.map(getPhoneNumFromFile)

    df = df[df.a != '']
    print 'wirting ro text file...'
    df.to_csv(options.dist)

if __name__ == '__main__':

    main()

下面是不是用pandas自己写的版本

#! /usr/bin/env python
# -*- coding:utf-8   -*-
# __author__ == "tyomcat"
import re,optparse,os,time

p = optparse.OptionParser()
p.add_option('--source', '-s', default="d:/python/telpwd.txt",help=u'要处理的文件路径')
p.add_option('--dist', '-d', default="d:/python/dis.txt",help=u'输出文件路径')

options, arguments = p.parse_args()


print u'默认路径: %s' % options.source
print u'默认输出文件路径: %s' % options.dist
raw_input()

#大家自己处理txt文本的时候,只要重写这个函数就好了
def getPhoneNumFromFile(fobj):
    regex = re.compile(r'1\d{10}', re.IGNORECASE)
    phonenums = re.findall(regex, fobj)
    #print phonenums
    return phonenums
file = open(options.source)

output = []
start = time.clock()
start2 = time.time()
lines = 0
while 1:

    line = file.readline()
    lines += 1
    if not line:
        break
    arr = line.strip().split('----')

    rst = getPhoneNumFromFile(arr[0])

    if rst:
        temp = [rst[0]]
        if len(arr) == 2:
            temp.append(arr[1])


        print 'line ',lines,len(output), temp, time.clock() - start

        print line
        output.append(temp)
 # do something

rstfile = open(options.dist,'w')

for x in output:
    #x[1] += '\n'
    #print x[0] + '----' + x[1] + '\n'
    if len(x) == 2:
        rstfile.write(x[0] + '----' + x[1] + '\n')
    # else:
    #     rstfile.write(x[0] + '----'  + '\n')

print u'文件输出到: '+options.dist
end2 = time.time()
end = time.clock()


print u'程序用时cpu:',end - start
print u'程序用时:',end2 - start2

raw_input()

效率差别那是极大的,这个要3个多小时,上面要十几秒

posted @ 2016-05-27 19:33  活着挺好  阅读(843)  评论(0编辑  收藏  举报

我是郎