美文网首页我爱编程
127、使用pandas读取文本文件

127、使用pandas读取文本文件

作者: 陈容喜 | 来源:发表于2018-01-20 00:16 被阅读0次
    pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,其中常用read_csv和read_table读取文件。 0.png

    下面出现的例子中需要读取的文件都存放在我自己的电脑 D:\Python\notebook\pydata-book-master\ch06 中。

    使用read_csv读入csv文件: 1.png 使用read_table读入csv文件: 2.png 如果读取一个文件没有标题行,可以使用header参数自动分配标题行: 3.png 或者使用names参数指定需要的列表头: 4.png 还可以使用index_col参数指定DataFrame的索引(也就是修改行表头): 5.png 有些表格可能使用空白符或者字符串去分隔字段,这时可以使用正则表达式作为read_table分隔符: 6.png

    缺失值处理

    缺失数据经常是要么没有(空字符串),要么用某个标记值表示。

    源文件: 7-0.png 默认情况下,pandas会用NaN进行标记: 7.png 可以用一个字典为各列指定不同的NA标记值: 8.png

    逐块读取文本文件

    在处理很大的文件时,我们可能只需读取文件很小的一部分。

    如果只想读取几行文件,可以通过nrows参数进行指定即可: 9.png 10.png 要逐块读取文件,需要设置chunksize(行数)参数: 11.png read_csv返回的一个TextParser对象可以根据chunksize对文件进行逐块迭代。如下面的例子,将值计数聚合到“key”列中: 12.png 结果为: 13.png

    源代码为:

    # coding: utf-8
    
    # # 使用pandas读取文本文件
    
    # In[1]:
    
    import numpy as np
    from pandas import Series,DataFrame
    import pandas as pd
    
    
    # ### 方法一:使用read_csv读入csv文件
    
    # In[2]:
    
    df = pd.read_csv('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex1.csv')
    print(df)
    
    
    # ### 方法二:使用read_table读入csv文件
    
    # In[3]:
    
    # 不指定分隔符的情况
    df2 = pd.read_table('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex1.csv')
    print(df2)
    
    
    # In[4]:
    
    # 使用参数sep指定分隔符情况
    df3 = pd.read_table('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex1.csv',sep=',')
    print(df3)
    
    
    # In[5]:
    
    '''
    如果读取的文件没有列表头,使用header参数自动分配列表头
    '''
    df_ex2 = pd.read_csv('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex2.csv')
    print(df_ex2)
    
    
    # In[6]:
    
    # 自动分配表头
    df_ex2 = pd.read_csv('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex2.csv',header=None)
    print(df_ex2)
    
    
    # In[7]:
    
    # 使用names参数指定列表头
    df_ex2_name = pd.read_csv('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex2.csv',names=['一','二','三','四','message'])
    print(df_ex2_name)
    
    
    # In[8]:
    
    # 使用index_col参数指定DataFrame的索引(行表头)
    names=['一','二','三','四','message']
    df_ex2_DF= pd.read_csv('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex2.csv',names=names,index_col='message')
    print(df_ex2_DF)
    
    
    # ### 使用正则表达式作为read_table分隔符
    
    # In[9]:
    
    list(open('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex3.txt'))
    
    
    # In[10]:
    
    # 使用正则表达式\s+处理空白符分隔
    result = pd.read_table('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex3.txt',sep='\s+')
    print(result)
    
    
    # ### 缺失值处理
    
    # In[11]:
    
    # 默认使用NaN填充缺失值
    df_na = pd.read_csv('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex5.csv')
    print(df_na)
    
    
    # In[12]:
    
    # 使用isnull转为布尔值来标记NA值
    pd.isnull(df_na)
    
    
    # In[13]:
    
    print(df_na)
    
    # 使用一个字典把各列指定值转为NA值
    new_na = {'message':['foo'],'c':[11],'something':['two']}
    new_na_values = pd.read_csv('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex5.csv',na_values=new_na)
    print('\n new_na_values:\n',new_na_values)
    
    
    # ### 逐块读取文本文件
    
    # In[14]:
    
    # 读取一个10000行5列的.csv文件
    all_Csv = pd.read_csv('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex6.csv')
    print(all_Csv)
    
    
    # In[15]:
    
    # 只读取5行文件
    part_Csv = pd.read_csv('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex6.csv',nrows=5)
    print(part_Csv)
    
    
    # In[16]:
    
    # 根据chunksize对文件进行逐块迭代
    chunker = pd.read_csv('D:\\Python\\notebook\\pydata-book-master\\ch06\\ex6.csv',chunksize=1000)
    print(chunker)
    
    
    # In[17]:
    
    # 统计 key 这一列中各个值出现的次数
    tot = Series([])
    for piece in chunker:
        tot = tot.add(piece['key'].value_counts(),fill_value=0)
        
    #print(tot)  
    
    # 对结果进行降序排序
    new_tot = tot.sort_values(ascending=False)
    print(new_tot)
    
    
    # In[18]:
    
    # 选取前10行的结果显示
    df_tot = new_tot[:10]
    print(df_tot) 
    

    相关文章

      网友评论

        本文标题:127、使用pandas读取文本文件

        本文链接:https://www.haomeiwen.com/subject/jeaooxtx.html