pandas读取文件数据、存储详解笔记

本文是对 《利用Python进行数据分析》中关于数据读取的回顾性总计笔记,包含代码注释等。 

目录

    pd.read_csv和pd.read_table

            jsons数据读取

二级制数据读取

读写Microsoft Excel文件pd.read_excel

数据写入 .to_csv


 

pandas读取的函数汇总


    pd.read_csv和pd.read_table

 

   共性:
            1)两者功能都是从文件、URL、文件型对象中加载带分隔符的数据。
            2) 函数的主要参数含义一致。都包括path,sep/delimiter,header,index_col,names,skiprows,na_values,parse_dates,nrows,converters,encoding(前面的这些要记住,尤其注意在读取的时候names为表示列名列表)等。
主要参数含义表   
     从实例中进行记录,并将注意点注释在代码中
 

sentinels = {'message': ['foo', 'NA'], 'something': ['two']}
pd.read_csv('ch06/ex5.csv', na_values=sentinels) # 参数 na_values 一组用于替换NA的值。如果传的是kv对,则表示各列中key表示列名。如此k为 message列中,v的值[ 'foo', 'NA'] 都表示为NaN 缺失值,即读出来的值会以缺失值的情况来表示。 如果传的是list ,则表示这个读取的数据各列中遇到list里的值就都当做了NaN缺失值处理
pd.read_csv('ch06/ex5.csv', na_values=[5,8]) # 
print(pd.read_csv('ch06/ex2.csv',header=None)) # header 设置导入DataFrame的列名称(选取表头),选取第几行的值作为列名。当另一个参数names没有被赋值时,如果不指定header ,默认header 会给值0,即选取数据的第一行作为列名,如上。当 names 被赋值,header没有被显示赋值时,header的值相当于None,列名按names的给值来,如下。
print(pd.read_csv('ch06/ex2.csv',names=['a','b','c','d','message']))
print("names 和header都给值")
print(pd.read_csv('ch06/ex2.csv',header=0,names=['aa','bb','cc','dd','message'])) # 当names 和header都给值时,以names给的值为列名。即header=0的第一行具体值a,b,c,d,message没有起作用。
# s=pd.read_csv('ch06/ex2.csv',columns=['a','b','c','d','message']) # 注意这个会报错,解析的时候没有columns 。读数据的时候pd.read_csv里面给列名赋值的参数为names ,读取数据完毕后即得到的df 的columns列名。
names=['a','b','c','d','message']
s=pd.read_csv('ch06/ex2.csv',names=names,index_col='message') # names指定各列的名字。index_col指定得到的df的索引。 注意此时被指定的索引列不在出现在columns里了
print(s.columns)

注意:pd.read_csv函数读取数据时的参数没有columns ,而是names。读数据的时候pd.read_csv里面给列名赋值的参数为names ,读取数据完毕后即得到的df 的columns列名。

 区别
            read_csv的默认分隔符为逗号read_table的默认分隔符为制表符("\t“),这个其实好记,因为从sql table中抽取数据出来时,默认的分隔符就是制表符。分隔符都可以通过sep指定,只是默认的不同而已。
    读取文件的其他相关参数(简单了解即可)

pandas读取文件数据、存储详解笔记_第1张图片


        
    jsons数据读取

       思路即通过json.loads将Json数据读取为字典,然后通过DataFrame函数将其转换为dataframe格式的数据,实现数据读取
  例子

obj = """
{"name": "Wes",
 "places_lived": ["United States", "Spain", "Germany"],
 "pet": null,
 "siblings": [{"name": "Scott", "age": 25, "pet": "Zuko"},
              {"name": "Katie", "age": 33, "pet": "Cisco"}]
}
""" # 注意此用的包围的符号是 三个", """数据"""   
import json 
result=json.loads(obj) # loads 解析json     
siblings=DataFrame(result['siblings'],columns=['name','age']) # pd.DataFrame选取数据,构建dataframe 
print(siblings)# 

    输出:
    name    age
0    Scott    25
1    Katie    33


二级制数据读取

 

  pd.read_pickle  (简单了解即可)
 例子
print(pd.read_pickle('ch06/frame_pickle'))
输出:              
a    b    c    d    message
0    1    2    3    4    hello
1    5    6    7    8    world
2    9    10    11    12    foo


读写Microsoft Excel文件pd.read_excel


读取,pd.ExcelFile或pandas.read_excel
实例    

xlsx = pd.ExcelFile('examples/ex1.xlsx')
frame = pd.read_excel('examples/ex1.xlsx', 'Sheet1') # 可以将excel里面的指定的表文件名传进去,传递到pandas.read_excel:

写入,pandas数据写入为Excel格式
实例
 

#   如果需要指定sheet名,首先创建一个ExcelWriter,然后使用pandas对象的to_excel方法将数据写入到其中:
In [108]: writer = pd.ExcelWriter('examples/ex2.xlsx')

In [109]: frame.to_excel(writer, 'Sheet1')

In [110]: writer.save()
 #  ,不指定sheet名 
frame.to_excel('examples/ex2.xlsx')

数据写入 .to_csv


        dataframe或者series.to_csv
将dataframe写入文件
功能
                将数据写到一个默认以逗号分隔的文件中,可以通过sep指定参数。
参数
        主要参数:sep,path_or_buf,header,index,columns,encoding

DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None, 
header=True, index=True, index_label=None, mode='w', encoding=None, compression=None, 
quoting=None, quotechar='"', line_terminator='\n', chunksize=None, tupleize_cols=None, 
date_format=None, doublequote=True, escapechar=None, decimal='.')

详细含义(了解即可)
path_or_buf=None: string or file handle, default None
File path or object, if None is provided the result is returned as a string.字符串或文件句柄,默认无文件路径或对象,如果没有提供,结果将返回为字符串。

sep : character, default ‘,’
Field delimiter for the output file.默认字符 ‘ ,’,输出文件的字段分隔符。

na_rep : string, default ‘’
Missing data representation字符串,默认为 ‘’浮点数格式字符串

float_format : string, default None
Format string for floating point numbers字符串,默认为 None浮点数格式字符串

columns : sequence, optional Columns to write顺序,可选列写入

header : boolean or list of string, default True,Write out the column names. If a list of strings is given it is assumed to be aliases for the column names字符串或布尔列表,默认为true.写出列名。如果给定字符串列表,则假定为列名的别名。

index : boolean, default True,Write row names (index).布尔值,默认为Ture.写入行名称(索引)

index_label : string or sequence, or False, default None,Column label for index column(s) if desired. If None is given, and header and index are True, then the index names are used. A sequence should be given if the DataFrame uses MultiIndex. If False do not print fields for index names. Use index_label=False for easier importing in R  字符串或序列,或False,默认为None
如果需要,可以使用索引列的列标签。如果没有给出,且标题和索引为True,则使用索引名称。如果数据文件使用多索引,则应该使用这个序列。如果值为False,不打印索引字段。在R中使用index_label=False 更容易导入索引.

mode : str模式:值为‘str’,字符串,Python写模式,默认“w”

encoding : string, optional,编码:字符串,可选
表示在输出文件中使用的编码的字符串,Python 2上默认为“ASCII”和Python 3上默认为“UTF-8”。

compression : string, optional,字符串,可选项,表示在输出文件中使用的压缩的字符串,允许值为“gzip”、“bz2”、“xz”,仅在第一个参数是文件名时使用。

line_terminator : string, default ‘\n’
字符串,默认为 ‘\n’
在输出文件中使用的换行字符或字符序列

quoting : optional constant from csv module
CSV模块的可选常量
默认值为to_csv.QUOTE_MINIMAL。如果设置了浮点格式,那么浮点将转换为字符串,因此csv.QUOTE_NONNUMERIC会将它们视为非数值的。

quotechar : string (length 1), default ‘”’
字符串(长度1),默认“”
用于引用字段的字符

doublequote : boolean, default True
布尔,默认为Ture
控制一个字段内的quotechar

escapechar : string (length 1), default None
字符串(长度为1),默认为None
在适当的时候用来转义sep和quotechar的字符

chunksize : int or None,int或None,一次写入行

tupleize_cols : boolean, default False
布尔值 ,默认为False从版本0.21.0中删除:此参数将被删除,并且总是将多索引的每行写入CSV文件中的单独行,(如果值为false)将多索引列作为元组列表(如果TRUE)或以新的、扩展的格式写入,其中每个多索引列是CSV中的一行。

date_format : string, default None,字符串,默认为None,字符串对象转换为日期时间对象decimal: string, default ‘.’字符串,默认’。’字符识别为小数点分隔符。例如。欧洲数据使用 ​​’,’

具体 实例
      data.to_csv(sys.stdout,sep='|') # sys.stdout打印输出。即 是接着写入的数据流,并未真正写入文件,而是写入输出到打印流数据流而已。默认 缺失值在输出结果中会被表示为空字符串
输出
  |something|a|b|c|d|message
0|one|1|2|3.0|4|
1|two|5|6||8|world
2|three|9|10|11.0|12|foo


data.to_csv(sys.stdout,index=False,columns=['a','b','c']) #注意输出的时候 可以通过columns参数选择需要输出保存的数据列
输出
a,b,c
1,2,3.0
5,6,
9,10,11.0
# 单个Series也可以写入
dates=pd.date_range('1/1/2000',periods=7) # 生成日期date 格式的可以直接用date_range
ts=Series(np.arange(7),index=dates)
ts.to_csv('ch06/tseries.csv') #  单个Series也可以写入
!cat ch06/tseries.csv #
输出
2000-01-01,0
2000-01-02,1
2000-01-03,2
2000-01-04,3
2000-01-05,4
2000-01-06,5
2000-01-07,6
 

pd.read_sql

 

在实例代码中进行了解
 

query="""
create table test
(a varchar(20),b varchar(20),
c real, d integer);
"""
con=sqlite3.connect(':memory:')  # 利用sqlite3 工具去连接数据。实际这应该是数据的地址。 此时临时数据库
cursor=con.execute('select * from test') #execute 执行语句,
rows=cursor.fetchall() # fetchall 拿数据
rows
DataFrame(rows,columns=zip(*cursor.description)[0]) #  列名位于游标的description 属性中,注意需要这样读取才能拿到数据

In [135]: import sqlalchemy as sqla

In [136]: db = sqla.create_engine('sqlite:///mydata.sqlite')

In [137]: pd.read_sql('select * from test', db)
Out[137]: 
             a           b     c  d
0      Atlanta     Georgia  1.25  6
1  Tallahassee     Florida  2.60  3
2   Sacramento  California  1.70  5

鸣谢与参考:

《利用python 进行数据分析》

https://blog.csdn.net/u010801439/article/details/80033341

 

你可能感兴趣的:(特征工程与数据分析,python,pandas)