pandas-数据加载、存储与文件格式

首先安装pandas模块
pip Install pandas 或安装集成环境 anaconda(需要下载安装包)

  • pandas中读取文件的解析函数

read_csv()、read_table() 从文件中国、url、文件型对象中加载带分隔符的数据,默认逗号
read_fwf() 读取定宽列格式数据
raed_clipboard() 读取剪切板中的数据
分隔符参数:sep:指定分隔符, 支持正则表达式

上述函数将文本数据转换成DataFrame对象,这些函数的选项分为:
1、索引:将一个或多个列当成返回的DataFrame处理,以及是否丛文件、用户获取列名
2、类型推断和数据转换:包括用户定义值的转换、缺失值标记列表等
3、日期解析:包括组合功能,如将分散在多个列中的日期时间组合成结果中的单个列
4、迭代:支持对大文件进行逐块迭代
5、不规整数据问题:跳过一些行,页脚。注释或其他不重要的部分

  • read_csv()读取文件
!cat ex1.csv # ipython环境支持 linux命令

a,b,c,d,message
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo

import pandas as pd
import numpy as np
# 使用read_csv()读取文件
# 自己定义列名, 使用names参数,接受一个列表
pd.read_csv('data/ex1.csv', sep=',', names=['a','b','c','d', 'message']) # sep 指定分隔符
# 使用默认的列名
pd.read_csv('data/ex2.csv', header=None)
# 如果想把某个列指定为DataFrame对象的索引,使用index_col参数
names = ['a','b','c','d','message']
pd.read_csv('data/ex2.csv', names=names, index_col='message')
# 如果想为DataFrame对象设置层次化索引,index_col参数接受由列编号或列名组成的列表即可
parsed = pd.read_csv('data/csv_mindex.csv', index_col=['key1', 'key2'])
parsed
  • 分隔符, 使用正则表达式分隔
result = pd.read_table('data/ex3.txt', sep='\s+')
result# 由于列名比数据行的数量少,所以read_csv或read_table推断第一列应该是DataFrame的索引
  • 不规整数据问题
# 使用参数来处理异常数据,例如skiprows可以跳过指定索引行,跳过文件中的注释数据
pd.read_csv('data/ex4.csv', skiprows=[0,2,3])
 !cat data/ex4.csv # 打印ex4.csv数据
# hey!
a,b,c,d,message
# just wanted to make things more difficult for you
# who reads CSV files with computers, anyway?
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
  • 缺失值处理
!cat data/ex5.csv
""" 该数据为ex5.csv
something,a,b,c,d,message
one,1,2,3,4,NA
two,5,6,,8,world
three,9,10,11,12,foo
"""
result = pd.read_csv('data/ex5.csv')
result
pd.isnull(result) # 得到DataFrame数据对象是否为空的DataFrame数据对象
# na_values参数接受一组用于表示缺失值的字符串, 传给na_values的值,将会被NaN替换
result = pd.read_csv('data/ex5.csv', na_values=['NULL
result
# 使用字典为各列指定不同的NA标记, 将字典传给na_values参数
sentinels = {'message':['foo','NA'],'something':['two']}
pd.read_csv('data/ex5.csv', na_values=sentinels)
  • read_csv/read_table参数

path #表示文件系统位置,URL,文件型对象的字符串
sep or delimiter #用于对行中各字段进行拆分的字符序列或正则
header #用作列名的行号
index_col #用作行索引的列编号或列名
names #用于结果的列名列表,结合header=None
skiprows #从文件开始处开始,需要跳过的行索引
na_values #用于替换NA的值
comments #用于将注释信息丛行尾拆分出去的字符
parse_dates # 尝试将数据解析成日期
date_parser #用于解析日期函数
nrows #需要读取的行数
iterator #返回一个TextParser对象以便逐行读取文件
chunksize #文件块的大小
skip_footer #需要忽略的行数(从末尾开始)
encoding #指定编码
squeeze #如果数据经过解析后仅含有一列,则返回Series对象
thousands #千分位分隔符

# nrows 指定读取的行数
result = pd.read_csv('data/ex6.csv',nrows=10)
result
# 逐块读取文本文件, chunksize参数接受行数
chunker = pd.read_csv('data/ex6.csv', chunksize=1000)
# chunker # 返回一个TextParser对象
tot = pd.Series([])
for piece in chunker:
    tot = tot.add(piece['key'].value_counts(), fill_value=0)
# tot = tot.order(ascending=False)
tot[:10]
  • 写出数据到文件
# 将数据写出到文本格式
data = pd.read_csv('data/ex5.csv')
print(data)
# 使用to_csv()方法将数据写到一个以逗号分隔符的文件中
data.to_csv('data/ex5out.csv')
!cat data/ex5out.csv
# to_csv() 支持其他分隔符
import sys
data.to_csv(sys.stdout, sep='|')
# 缺失值在输出时会被表示成空字符串
# 处理缺失值,设置缺失值标记
data.to_csv(sys.stdout, na_rep='NULL')
# 写出禁用行和列标签
data.to_csv(sys.stdout, index=False, header=False)
# 只写出一部分,写出顺序按照指定顺序
data.to_csv(sys.stdout, index=False, columns=['a','b','c'])
dates = pd.date_range('1/1/2000', periods=7)
ts = pd.Series(np.arange(7), index=dates)
ts.to_csv('data/tseries.csv')
!cat data/tseries.csv
  • Series对象读取数据
pd.Series.from_csv('data/tseries.csv', parse_dates=True)
  • python 内置的csv模块
import csv
f = open('data/ex7.csv')
reader = csv.reader(f)
for line in reader:
    print line
# 处理数据格式
lines = list(csv.reader(open('data/ex7.csv')))
header, values = lines[0], lines[1:]
data_dict = {h: v for h, v in zip(header, zip(*values))}
data_dict
# CSV文件的形式很多,可以继承csv.Dialect,创建子类类定义新格式
'''参数
delimiter 分隔符
lineterminator 行结束符
quotechar 字段引用符号
quoting 引用约定
skipinitialspace  忽略分隔符后面的空格符,默认False
doublequote 处理字段内的引用符号,True为双写
escapechar 用于对分隔符进行转义的字符串
'''
f = open('data/ex7.csv')
class my_dialect(csv.Dialect):
    lineterminator = '\n' # 行结束符
    delimiter = ';'# 分隔符
    quotechar = '"' # 字符串引用约定
    quoting=1
reader = csv.reader(f, my_dialect)
for line in reader:
    print line
# 手工输出分隔符文件
with open('mydata.csv', 'w') as f:
    writer = csv.writer(f, dialect=my_dialect)
    writer.writerow(('one','two', 'three'))
    writer.writerow(('1','2','3'))
    writer.writerow(('4','5','6'))
    writer.writerow(('7','8','9'))
!cat mydata.csv
  • json 与DataFrame
obj="""
{"name":"wes",
"places_lived":["United States", "Spain","Germany"],
"pet":null,
"siblings":[{"name":"Katie","age":33,"pet":"Cisco"}]
}
"""
import json
result = json.loads(obj) # 将字符串转换成json格式
print(type(result))
###
asjson = json.dumps(result)# 将python对象转换成json
siblings = pd.DataFrame(result['siblings'], columns=['name','age'])
siblings
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容