pandas 转换为文本类型_pandas-数据加载、存储与文件格式

本文介绍了如何使用pandas读取和写入CSV文件,包括read_csv、read_table等函数的使用,处理分隔符、日期解析、不规整数据、缺失值等问题,并展示了如何将数据写出到文件,以及利用csv模块处理数据格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先安装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 指定分隔符

e1b41bbd8c65

# 使用默认的列名

pd.read_csv('data/ex2.csv', header=None)

e1b41bbd8c65

# 如果想把某个列指定为DataFrame对象的索引,使用index_col参数

names = ['a','b','c','d','message']

pd.read_csv('data/ex2.csv', names=names, index_col='message')

e1b41bbd8c65

# 如果想为DataFrame对象设置层次化索引,index_col参数接受由列编号或列名组成的列表即可

parsed = pd.read_csv('data/csv_mindex.csv', index_col=['key1', 'key2'])

parsed

e1b41bbd8c65

分隔符, 使用正则表达式分隔

result = pd.read_table('data/ex3.txt', sep='\s+')

result# 由于列名比数据行的数量少,所以read_csv或read_table推断第一列应该是DataFrame的索引

e1b41bbd8c65

不规整数据问题

# 使用参数来处理异常数据,例如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

e1b41bbd8c65

缺失值处理

!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

e1b41bbd8c65

pd.isnull(result) # 得到DataFrame数据对象是否为空的DataFrame数据对象

e1b41bbd8c65

# na_values参数接受一组用于表示缺失值的字符串, 传给na_values的值,将会被NaN替换

result = pd.read_csv('data/ex5.csv', na_values=['NULL

result

e1b41bbd8c65

# 使用字典为各列指定不同的NA标记, 将字典传给na_values参数

sentinels = {'message':['foo','NA'],'something':['two']}

pd.read_csv('data/ex5.csv', na_values=sentinels)

e1b41bbd8c65

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

e1b41bbd8c65

# 逐块读取文本文件, 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]

e1b41bbd8c65

写出数据到文件

# 将数据写出到文本格式

data = pd.read_csv('data/ex5.csv')

print(data)

# 使用to_csv()方法将数据写到一个以逗号分隔符的文件中

data.to_csv('data/ex5out.csv')

!cat data/ex5out.csv

e1b41bbd8c65

# to_csv() 支持其他分隔符

import sys

data.to_csv(sys.stdout, sep='|')

e1b41bbd8c65

# 缺失值在输出时会被表示成空字符串

# 处理缺失值,设置缺失值标记

data.to_csv(sys.stdout, na_rep='NULL')

e1b41bbd8c65

# 写出禁用行和列标签

data.to_csv(sys.stdout, index=False, header=False)

e1b41bbd8c65

# 只写出一部分,写出顺序按照指定顺序

data.to_csv(sys.stdout, index=False, columns=['a','b','c'])

e1b41bbd8c65

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

e1b41bbd8c65

Series对象读取数据

pd.Series.from_csv('data/tseries.csv', parse_dates=True)

e1b41bbd8c65

python 内置的csv模块

import csv

f = open('data/ex7.csv')

reader = csv.reader(f)

for line in reader:

print line

e1b41bbd8c65

# 处理数据格式

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

e1b41bbd8c65

# 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

e1b41bbd8c65

# 手工输出分隔符文件

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

e1b41bbd8c65

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

e1b41bbd8c65

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值