- 7. 数据的读取与存储
- 7.1 读操作
- 7.2 写操作
- 7.3 JSON格式
- 7.4 分块读取大文件
Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了 高级数据结构和 数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一
(1) 一个强大的分析和操作大型结构化数据集所需的工具集
(2) 基础是NumPy,提供了高性能矩阵的运算
(3) 提供了大量能够快速便捷地处理数据的函数和方法
(4)应用于数据挖掘,数据分析
(5)提供数据清洗功能 7. 数据的读取与存储 7.1 读操作
读取文件函数:
| 函数 | 说明 |
|---|---|
| read_csv | 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号 |
| read_table | 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(’t’) |
| read_fwf | 读取定宽列格式数据(也就是说。没有分隔符) |
| read_clipboard | 读取剪贴板中的数据,可以看做read_table的剪贴板版。再将网页转换为表格时很有用 |
| read_excel | 从 Exeel XLS或XLSX file读取表格教据 |
| read_hdf | 读取pandas写的HDFS文件 |
| read_html | 读取HTML文档中的所有表格 |
| read_json | 读取JSON字符串中的数据 |
| read_msgpack | 二进制格式编码的pandas数据 |
| read_pickle | 读取Pythom pickle格式中存储的任意对象 |
| read_sas | 读取存储于SAS系统自定义存储格式的SAS数据集 |
| read_sql | (使用SQL Alchemy)读取SQL查询结果为 pandas的 Dataframe |
| read_stata | 读取 Stata 文件格式的教据集 |
读取文件函数中参数说明:
| 参数 | 说明 |
|---|---|
| path | 表示文件系统位置、url、文件型对象的字符串 |
| sep或delimiter | 用于对行中各字段进行拆分的字符序列或正则表达式 |
| header | 用作列名的行号。默认为0(第一行),如果没有header行就应该设置为None |
| index_col | 用作行索引的列编号或列名。可以是单个名称/数字或由多个名称/数字组成的列表(层次化索引) |
| names | 用于结果的列名列表,结合header=None |
| skiprows | 需要忽略的行数(从文件开始出算起),或需要跳过的行号列表(从0开始) |
| na_values | 一组用于替换NA的值 |
| comment | 用于将注释信息从行尾拆分出去的字符 |
| parse_dates | 尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。此外,还可以指定需要解析的一组列号或列名。如果列表的元素为列表或元祖,就会将多个列组合到一起再进行日期解析工作(例如,日期/时间分别位于两个列中) |
| keep_date_col | 如果连接多列解析日期,则保持参与连接的列。默认为False |
| converters | 由列号/列名跟函数之间的映射关系组成的字典。例如,{‘foo’:f}会对foo列的所有值应用函数f |
| dayfirst | 当解析有歧义的日期时,将其看做国际格式(例如,7/6/2012->June,7,2012)。默认为False |
| day_parser | 用于解析日期的函数 |
| nrows | 需要读取的行数(从文件开始处算起) |
| iterator | 返回一个TextParser以便逐块读取文件 |
| chunksize | 文件块的大小(用于迭代) |
| skip_footer | 需要忽略的行数(从文件末尾处算起) |
示例代码:
#读操作
#read_csv默认的分隔符为,
df = pd.read_csv('ex1.csv')
#结果为:
# a b c d message
#0 1 2 3 4 hello
#1 5 6 7 8 world
#2 9 10 11 12 python
df
#read_table默认分隔符为制表符
#结果为:
# a b c d message
#0 1 2 3 4 hello
#1 5 6 7 8 world
#2 9 10 11 12 python
pd.read_table('ex1.csv',sep=',')
#读取没有列名只有数据的文件 读取文件时列名为默认列名
#结果为:
# 0 1 2 3 4
#0 1 2 3 4 hello
#1 5 6 7 8 world
#2 9 10 11 12 python
pd.read_csv('ex2.csv',header=None)
#读取没有列名只有数据的文件 读取文件时给定列名
#结果为:
# a b c d message
#0 1 2 3 4 hello
#1 5 6 7 8 world
#2 9 10 11 12 python
pd.read_csv('ex2.csv',names=['a','b','c','d','message'])
#index_col指定某一列变为行索引
df1 = pd.read_csv('ex2.csv',names=['a','b','c','d','message'],index_col='message')
#结果为:
# a b c d
#message
#hello 1 2 3 4
#world 5 6 7 8
#python 9 10 11 12
df1
#结果为:
# key1 key2 value1 value2
#0 one a 1 2
#1 one b 3 4
#2 one c 5 6
#3 one d 7 8
#4 two a 9 10
#5 two b 11 12
#6 two c 13 14
#7 two d 15 16
pd.read_csv('csv_mindex.csv')
#指定多列为层级索引
pa = pd.read_csv('csv_mindex.csv',index_col=['key1','key2'])
#结果为:
# value1 value2
# key1 key2
# one a 1 2
# b 3 4
# c 5 6
# d 7 8
# two a 9 10
# b 11 12
# c 13 14
# d 15 16
pa
#read_table读取txt文件 sep='s+'
df1 = pd.read_table('ex3.txt',sep='s+')
#结果为:
# A B C
#aaa -0.264438 -1.026059 -0.619500
#bbb 0.927272 0.302904 -0.032399
#ccc -0.264273 -0.386314 -0.217601
#ddd -0.871858 -0.348382 1.100491
df1
7.2 写操作
df2 = pd.read_csv('ex1.csv')
#结果为:
# a b c d message
#0 1 2 3 4 hello
#1 5 6 7 8 world
#2 9 10 11 12 python
df2
#将dataframe数据写入csv文件中
df2.to_csv('out_ex1.csv')
7.3 JSON格式
## JSON数据
import json
obj = """
{"name":"Wes",
"places_lived":["United States","Spain","Germany"],
"pet":null,
"siblings":[{"name":"Scott","age":30,"pets":["Zeus","Zuko"]},
{"name":"Katie","age":38,
"pets":["Sixes","Stache","Cisco"]}]
}
"""
#将json字符串转换为python形式
res = json.loads(obj)
#结果为:
#{'name': 'Wes',
# 'places_lived': ['United States', 'Spain', 'Germany'],
# 'pet': None,
# 'siblings': [{'name': 'Scott', 'age': 30, 'pets': ['Zeus', 'Zuko']},
# {'name': 'Katie', 'age': 38, 'pets': ['Sixes', 'Stache', 'Cisco']}]}
res
#将python对象转化为json格式
res1 = json.dumps(res)
#结果为:
#'{"name": "Wes", "places_lived": ["United States", "Spain", "Germany"], "pet": null, "siblings": [{"name": "Scott", "age": 30, "pets": ["Zeus", "Zuko"]}, {"name": "Katie", "age": 38, "pets": ["Sixes", "Stache", "Cisco"]}]}'
res1
#读取python形式对象中某个参数的值
sib = pd.Dataframe(res['siblings'],columns=['name','age'])
#结果为:
# name age
#0 Scott 30
#1 Katie 38
sib
7.4 分块读取大文件
#方式一 agg1 = pd.read_csv(r'agg_match_stats_1.csv',chunksize=10) agg1.get_chunk() #方式二 agg1 = pd.read_csv(r'agg_match_stats_1.csv',iterator=True) agg1.get_chunk(5)



