打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python pandas IO tools 之read

python pandas IO tools 之csv文件读写

英文原文:pandas IO tools

读取csv文件:pd.read_csv(),写入csv文件:pd.to_csv()
pandas还可以读取一下文件:
read_csv,
read_excel,
read_hdf,
read_sql,
read_json,
read_msgpack (experimental),
read_html,
read_gbq (experimental),
read_stata,
read_sas,
read_clipboard,
read_pickle;
相应的写入:
to_csv,
to_excel,
to_hdf,
to_sql,
to_json,
to_msgpack (experimental),
to_html,
to_gbq (experimental),
to_stata,
to_clipboard,
to_pickle.

常用参数的读取csv文件

import pandas as pdobj=pd.read_csv('f:/ceshi.csv')print objprint type(obj)print obj.dtypes
  • 1
  • 2
  • 3
  • 4
  • 5
  Unnamed: 0  c1  c2  c30          a   0   5  101          b   1   6  112          c   2   7  123          d   3   8  134          e   4   9  14<class 'pandas.core.frame.DataFrame'>Unnamed: 0    objectc1             int64c2             int64c3             int64dtype: object

ceshi.csv为有列索引没有行索引的数据,read_csv会自动加上行索引,即使原数据集有行索引。
read_csv读取的数据类型为Dataframe,obj.dtypes可以查看每列的数据类型

obj_2=pd.read_csv('f:/ceshi.csv',header=None,names=range(2,5))print obj_2
  • 1
  • 2
    2   3   40  c1  c2  c31   0   5  102   1   6  113   2   7  124   3   8  135   4   9  14

header=None时,即指明原始文件数据没有列索引,这样read_csv为自动加上列索引,除非你给定列索引的名字。

obj_2=pd.read_csv('f:/ceshi.csv',header=0,names=range(2,5))print obj_2
  • 1
  • 2
   2  3   40  0  5  101  1  6  112  2  7  123  3  8  134  4  9  14

header=0,表示文件第0行(即第一行,python,索引从0开始)为列索引,这样加names会替换原来的列索引。

obj_2=pd.read_csv('f:/ceshi.csv',index_col=0)print obj_2
  • 1
  • 2
   c1  c2  c3a   0   5  10b   1   6  11c   2   7  12d   3   8  13e   4   9  14
obj_2=pd.read_csv('f:/ceshi.csv',index_col=[0,2])print obj_2
  • 1
  • 2
      c1  c3  c2        a 5    0  10b 6    1  11c 7    2  12d 8    3  13e 9    4  14

index_col为指定数据中那一列作为Dataframe的行索引,也可以可指定多列,形成层次索引,默认为None,即不指定行索引,这样系统会自动加上行索引(0-)

obj_2=pd.read_csv('f:/ceshi.csv',index_col=0,usecols=[0,1,2,3])print obj_2
  • 1
  • 2
   c1  c2  c3a   0   5  10b   1   6  11c   2   7  12d   3   8  13e   4   9  14
obj_2=pd.read_csv('f:/ceshi.csv',index_col=0,usecols=[1,2,3])print obj_2
  • 1
  • 2
    c2  c3c1        0    5  101    6  112    7  123    8  134    9  14

usecols:可以指定原数据集中,所使用的列。在本例中,共有4列,当usecols=[0,1,2,3]时,即选中所有列,之后令第一列为行索引,当usecols=[1,2,3]时,即从第二列开始,之后令原始数据集的第二列为行索引。

obj_2=pd.read_csv('f:/ceshi.csv',index_col=0,nrows=3)print obj_2
  • 1
  • 2
   c1  c2  c3a   0   5  10b   1   6  11c   2   7  12

nrows:可以给出从原始数据集中的所读取的行数,目前只能从第一行开始到nrows行。

datetime handing 数据中日期处理

obj_3=pd.read_csv('f:/ceshi_date.csv',index_col=0,)print obj_3print type(obj_3.index)
  • 1
  • 2
  • 3
                   A  B  Cdate                      20090101           a  2  320090102           b  3  420090103           c  4  5<class 'pandas.indexes.numeric.Int64Index'>
obj_3=pd.read_csv('f:/ceshi_date.csv',index_col=0,parse_dates=True)print obj_3print type(obj_3.index)
  • 1
  • 2
  • 3
                   A  B  Cdate                      2009-01-01         a  2  32009-01-02         b  3  42009-01-03         c  4  5<class 'pandas.tseries.index.DatetimeIndex'>

parse_dates=True:可令字符串解析成时间格式。

data='date,value,cat\n1/6/2000,5,a\n2/6/2000,10,b\n3/6/2000,15,c'print data
  • 1
  • 2
date,value,cat1/6/2000,5,a2/6/2000,10,b3/6/2000,15,c
from StringIO import StringIOprint pd.read_csv(StringIO(data),parse_dates=[0],index_col=0)
  • 1
  • 2
            value catdate                 2000-01-06      5   a2000-02-06     10   b2000-03-06     15   c
print pd.read_csv(StringIO(data),parse_dates=[0],index_col=0,dayfirst=True)
  • 1
            value catdate                 2000-06-01      5   a2000-06-02     10   b2000-06-03     15   c

US常用时间格式:MM/DD/YYYY,dayfirst=True:可将其改为DD/MM/YYYY

分隔符和阈值

tem='id|level|category\npatient1|123,000|x\npatient2|23,000|y\npatient3|1,234,018|z'print tem
  • 1
  • 2
id|level|categorypatient1|123,000|xpatient2|23,000|ypatient3|1,234,018|z
print pd.read_csv(StringIO(tem),sep='|')
  • 1
         id      level category0  patient1    123,000        x1  patient2     23,000        y2  patient3  1,234,018        z
print pd.read_csv(StringIO(tem),sep='|',thousands=',')
  • 1
         id    level category0  patient1   123000        x1  patient2    23000        y2  patient3  1234018        z
  • 1
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
每天学点python数据分析软件-3.4 Pandas-Dataframe-IO操作
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Modin:一行代码让pandas加速数十倍
Pandas学习笔记(一)
零基础学Python--强大的Pandas
python读取文本文件数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服