Python编程之提取满足某条件的另一列中的数据(可多文件操作)

标签: Python CSV 指定数据提取
2人阅读 评论(0) 收藏 举报
分类:

本程序需要结合文件名提取脚本和多文件数据提取文件脚本操作。

源代码如下:

#!usr\bin\python
# -*-coding:utf-8 -*-
import csv
import pandas as pd
import numpy as np
import winreg
import os

'''
1.打开链表文件,依次读取所要提取的数据
'''
'''******************链表文件数据和个数提取******************'''

def listfilehandle(listfile):
    Rowdata = []
    rfile = open(listfile, 'r')
    rfilelist = rfile.readlines()#直接读取文件中每一行数据转换成List类型
    #ListFileLen = len(rfilelist)  # 链表文件中文件名的个数
    #print ListFileLen
    for filename in rfilelist:
        Rowdata.append(filename.strip('\n'))
    return Rowdata

'''******************CSV文件名打开路径列表*****************'''
def fnlistpath(filename):
    root = 'C:\Desktop\CSV\NewData\DataValue'#转换后的csv数据所在的目录
    fileopenpath = root + '\\' + filename
    return fileopenpath

'''***********************特定数据提取********************************'''
def get_desktop():
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')#利用系统的链表
    return winreg.QueryValueEx(key, "Desktop")[0] #返回的是Unicode类型数据

def GetCsvAllData(filepath):#读取CSV所有数据
    #filetype = '.csv'
    #filepath = root + '\\' + filename + filetype
    data = pd.read_csv(filepath, header=None, index_col=None)
    return data

def GetCsvColData(data , Col):#读取Col=1列数据
    getcoldata = data.ix[: , Col]  # 读取所有行,Col列数据,此处固定第一列(表示扫描电压值)Col=1
    return getcoldata

def DataToList(data):#只转换一列数据为List类型
    arrsdata = data.values  # Col列数据的值存放在数组中
    listdata = arrsdata.tolist()  # array类型转换为list类型
    return listdata

def GetSatisfyDataRowList(listdata, satisfyvalue):#得到满足数据的所有行,转换为List类型
    getdatalist = []  # 参考列下所有数据列表
    getrowlist = []  # 满足条件的行号列表
    for idata_list in listdata:#主要对参考列的数据进行曲有效数据位,方便数据检索(可去除,视情况而定)
        fidata_list = float("%.4f" % idata_list)  # 仅显示4位有效数据,且转换为浮点型
        getdatalist.append(fidata_list)
    for ilb in range(len(listdata)):
        if getdatalist[ilb] == satisfyvalue:
            getrowlist.append(ilb)
            #print ilb
    return getrowlist

def dataclassify(datalist):
    Singdata = []
    Doubdata = []
    datalen = len(datalist)

    for item in range(datalen):
        if item % 2 == 0:
            Singdata.append(datalist[item])
        else:
            Doubdata.append(datalist[item])
    return Singdata,Doubdata

if __name__=='__main__':

    alllistdata = []
    getdataCol = raw_input('dataCol(you want):')
    satisfyvalue = raw_input('Threshold:')

    if getdataCol=='':
        getdataCol = '3'#默认提取第四列(一般是采集的电阻数据)
    if satisfyvalue == '':
        satisfyvalue = '-0.1'#提取-0.1V电压下的电阻值

    getdataCol = int(getdataCol)
    satisfyvalue = float(satisfyvalue)
    print('提取电压值为%fV,第%d列数据' %(satisfyvalue,getdataCol))

    Desktop_path = str(get_desktop())
    listfilesroot = Desktop_path +'\CSV\NewData\listfile.txt'#CSV文件名所在的TXT文件
    Rowdata = listfilehandle(listfilesroot)

    mkfilepath = Desktop_path + '\CSV'  # 在电脑桌面创建CSV文件夹
    HRS = mkfilepath + '\NewData\DataValue\\' + 'aHRS.txt'
    LRS = mkfilepath + '\NewData\DataValue\\' + 'aLRS.txt'

    with open(HRS, 'w+') as fo:
        fo.truncate()  # 清空fo文件内容
    with open(LRS, 'w+') as foo:
        foo.truncate()  # 清空foo文件内容

    for index in Rowdata:
        filepath = fnlistpath(index)

        '''fnlist = os.walk(root)#文件夹下的文件夹操作(后续进一步开发)
        for root, dirs, files in fnlist:
        print dirs'''

        getdata = GetCsvAllData(filepath)
        listdata = DataToList(GetCsvColData(getdata,1))
        getrowlist = GetSatisfyDataRowList(listdata,satisfyvalue)
        goaldata = getdata.ix[getrowlist,getdataCol]
        ListColData = DataToList(goaldata)
        SatisfyRowSingdata,SatisfyRowDoubdata = dataclassify(ListColData)

        print SatisfyRowSingdata
        print SatisfyRowDoubdata
        print '************'+index+'**************'

        #数据写入到TXT文件中
        fo = open(HRS, 'a')
        for fSingdata in SatisfyRowSingdata:
            #fSingdata = abs(fSingdata)
            fo.write(str(fSingdata)+'\r\n')
        fo.close()
        foo = open(LRS, 'a')
        for fDoubdata in SatisfyRowDoubdata:
            #fDoubdata = abs(fDoubdata)
            foo.write(str(fDoubdata)+'\r\n')
        foo.close()

        '''写入CSV列数据,以字典形式写入'''
        '''alllistdata.append(listdata)
        dataframe = pd.DataFrame(zip())
        dataframe.to_csv("C:\Users\yujie\Desktop\CSV\NewData\\123\\" + index, index=False, sep=',')  # header=None,'''


    ''' for fdata in SatisfyRowListData:#改为csv存储数据
            fo.write(str(fdata)+'\r\n')'''

查看评论

根据文件的某一列的值满足条件,取出一行的内容

今天遇到的一个问题:线上出错的小库号已知需要定位到具体的流,这些流里面的所有小库数据都需要进行重跑:类似于这样的文件,有三列数据,根据第一列的值,抽取出第三列range信息cat fileA | aw...
  • sunshine__me
  • sunshine__me
  • 2016-09-04 17:34:53
  • 2330

某些列满足某些条件就被改是什么值,不满足就被改为另外的一些值(python pandas)

直接上实例代码吧 import pandas as pd import numpy as np if __name__ == '__main__': df = pd.DataFrame({'...
  • a19990412
  • a19990412
  • 2018-03-24 10:22:25
  • 70

使用python获取csv文本的某行或某列数据

站长用Python写了一个可以提取csv任一列的代码,欢迎使用。Github链接 csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: ...
  • Allyli0022
  • Allyli0022
  • 2018-01-22 09:51:04
  • 526

dataframe筛选数据根据某一个列的数据在另外的一个数组中

对dataframe中的数据进行筛选。想要根据某一列的数据比如要在另外的一个数组中,这时,就需要用到dataframe中比较经典的函数了isin()函数。 函数会返回一个bool型的datafram...
  • a19990412
  • a19990412
  • 2018-02-09 23:21:22
  • 311

Python 3.x提取数据某一行或某一列或特定位置元素

数据类型取第3行5列位置元素取1~3行,所有列元素ndarraydata[2][4]或data[2,4]data[0:3,:]DataFramedata.ix[2,4]data.ix[0:3,:]...
  • q124467623
  • q124467623
  • 2018-03-21 22:38:49
  • 100

python实现矩阵中某一列特定对象行的提取

ptsInCurrCluster = dateSet[np.nonzero(clusterAssment[:,0] == i)[0],:]提取clusterAssment矩阵中第一列等于i的所有行。...
  • weixin_37895339
  • weixin_37895339
  • 2017-11-26 10:18:04
  • 648

pandas 根据多列的数据的值的情况判断来生成另外一列的数值?

根据两列数据的自定义函数产生新的一列数据def do_merchant(x,y): return y/x A_2Vehicle_count['vehicle_count']=map(lambd...
  • qq_36076233
  • qq_36076233
  • 2017-03-27 11:21:01
  • 4746

excel中判断一个表中的某一列的数据在另一个表中的某一列中是否存在

比如: 表1: A B C 标记 表2:A B C 1 2 3 否 2 1 4 ...
  • jsjpanxiaoyu
  • jsjpanxiaoyu
  • 2013-06-05 22:47:07
  • 6766

如何在一个表中的一列的值赋值给同一个表中的另一列

问题如下:
  • zhangbest2009
  • zhangbest2009
  • 2014-05-09 11:13:41
  • 2682

Python numpy 提取矩阵的某一行或某一列

参考网址:http://blog.csdn.net/luoganttcc/article/details/74080768点击打开链接
  • m0_37870649
  • m0_37870649
  • 2018-03-14 07:43:54
  • 439
    个人资料
    等级:
    访问量: 93
    积分: 63
    排名: 162万+
    文章分类
    文章存档