pandas入门04---数据读取

对着背影说爱祢 提交于 2019-11-29 09:33:40

01 文本格式数据读写

01-01 带表头文件

一些数据载入函数,如pandas.read_csv会进行类型推断,因为列的数据类型并不是数据格式的一部分。这意味着你不必指定哪一列是数值、整数、布尔值或字符串。

例如:我们可以使用read_csv将一个以,分割的文件读入DataFrame。

df = pd.read_csv(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\ex1.csv')
print(df)

结果如下:

也可以使用read_table,并指定分隔符。

df2 = pd.read_table(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\ex1.csv',
	sep=',')
print(df2)

结果如下:

01-02 不带表头文件

有的文件不带表头,要读取该文件,需考虑一些选项。可以允许pandas自动分配默认列名,也可以自己指定列名。

data = pd.read_csv(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\ex2.csv',header=None)
print(data)

data1 = pd.read_csv(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\ex2.csv',names=['a','b','c','d','message'])
print(data1)

假设想要message列成为返回DataFrame的索引,可以指定位置4的列为索引,或将‘message’传给参数index_col。

names = ['a', 'b', 'c', 'd', 'message']
data2 = pd.read_csv(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\ex2.csv', names=names, index_col='message')
print(data2)

当你想从多个列中形成一个分层索引,需要传入一个包含列序号或列名的列表:

parsed = pd.read_csv(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\csv_mindex.csv',index_col=['key1','key2'])
print(parsed)

结果如下:

当字段以多种不同数量的空格分开时,可以使用正则表达式处理。

result = pd.read_table(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\ex3.csv', sep='\s+')
print(result)

由于列名的数量比列数少一个,因此read_table推断第一列为DataFrame索引。

#跳过第1,3,4行
skip_res = pd.read_csv(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\ex4.csv', skiprows=[0, 2, 3])
print(skip_res)

02 分块读文本文件

# 使输出显示更为紧凑
pd.options.display.max_rows = 10

res = pd.read_csv(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\ex6.csv')
print(res)

如果你想只读一小部分行(避免读取整个文件),可以指明nrows。

five_rows = pd.read_csv(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\ex6.csv', nrows=5)
print(five_rows)

为了分块读入文件,可以指定chunksize作为每一块的行数:

chunkers = pd.read_csv(r'C:\Users\Administrator\Downloads\pydata-book-2nd-edition\examples\ex6.csv',chunksize=1000)
tot = pd.Series([])
for piece in chunkers:
	tot = tot.add(piece['key'].value_counts(),fill_value=0)
tot = tot.sort_values(ascending=False)
print(tot[:10])

还有get_chunk方法,可以允许按照任意大小读取数据块。

03 将数据写入文本格式

可以使用to_csv方法,将数据导出为逗号分隔的文件。

data.to_csv("out.csv")

也可以使用其他分隔符。

# sys.stdout,控制台标准输出
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=[1,2,3])

Series也有to_csv方法。

使用json.load方法将Json字符串转换成Python形式,json.dumps可以将Python对象转换成Json。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!