赞
踩
摘要:介绍pandas相关的3种主要数据格式:CSV/TSV格式,pickle格式,JSON格式。
首先,存取分析后的数据。
- #先看下例,两句构成情感文本
- str1="这是个好电影,\n我喜欢!"
- str2="这部剧的\t第八季\t糟透了!"
- #\n是换行符,\t是制表符,这里是Tab键缩进的作用
- print(str1)
- print(str2)
'运行
这是个好电影, 我喜欢! 这部剧的 第八季 糟透了!
- import pandas as pd
- df = pd.DataFrame({'text':[str1,str2],'label':[1,0]})
- #构建数据框,分别将文本和正负情感放在text和label中,这里1是正面,0是负面
- df
text label 0 这是个好电影,\n我喜欢! 1 1 这部剧的\t第八季\t糟透了! 0
下面分别学习三种格式的导出。
第一种:
(1)CSV:逗号分隔数据文本文件。
df.to_csv('data.csv',index=None,encoding='utf-8-sig') #加了编码以防Excel打开乱码
pd.read_csv('data.csv')
text | label | |
---|---|---|
0 | 这是个好电影,\n我喜欢! | 1 |
1 | 这部剧的\t第八季\t糟透了! | 0 |
(2)TSV:制表符分隔数据文本文件。
- df.to_csv('data.csv',index=None,sep='\t',encoding='utf-8-sig')
- pd.read_csv('data.csv',sep='\t') #加入分隔符sep='\t'
text | label | |
---|---|---|
0 | 这是个好电影,\n我喜欢! | 1 |
1 | 这部剧的\t第八季\t糟透了! | 0 |
- #pip install jieba
- import jieba
-
- #结合jieba包,定义一个中文分词函数,去掉中文中的制表符和换行符
- def cleancut(s):
- s=s.replace('\t','')
- s=s.replace('\n','')
- return list(jieba.cut(s))
-
-
- #生成一个新的数据框df_list,复制原来的df
- df_list=df.copy()
-
- #把分词结果存储到新的数据框df_list的text中
- df_list.text=df.text.apply(cleancut)
- df_list #查看分词后的结果
text | label | |
---|---|---|
0 | [这, 是, 个, 好, 电影, ,, 我, 喜欢, !] | 1 |
1 | [这部, 剧, 的, 第八, 季, 糟透了, !] | 0 |
text中存储的是列表。注意上图是导入CSV内之前的形式。
df_list.text.iloc[0][0] #读取列表中的第一个元素
'这'
- df_list.to_csv('data_list.csv',index=None,encoding='utf-8-sig') #从Python导出到本地CSV中
- pd.read_csv('data_list.csv')#Python读取CSV文件
text | label | |
---|---|---|
0 | ['这', '是', '个', '好', '电影', ',', '我', '喜欢', '!'] | 1 |
1 | ['这部', '剧', '的', '第八', '季', '糟透了', '!'] | 0 |
注意上图是从CSV导入到Python后的形式,和导入前相比,每个列表元素多了一对单引号。
pd.read_csv('data_list.csv').text.iloc[0][0]
'['
pd.read_csv('data_list.csv').text.iloc[0][1]
"'"
pd.read_csv('data_list.csv').text.iloc[0][2]
'这'
上面三个输出结果表明,Python导出CSV文件时,分词列表会被视为字符串。
- df_list.to_csv('data_list.tsv',index=None,sep='\t',encoding='utf-8-sig') #从Python导出到本地TSV中
- pd.read_csv('data_list.tsv',sep='\t')#Python读取TSV文件
text | label | |
---|---|---|
0 | ['这', '是', '个', '好', '电影', ',', '我', '喜欢', '!'] | 1 |
1 | ['这部', '剧', '的', '第八', '季', '糟透了', '!'] | 0 |
可以看到TSV的结果和CSV的结果是一样的。
第二种:
pickle格式:是一种二进制格式。
- df_list.to_pickle('data.pickle') #从Python导出到本地pickle中
- df_list_loaded=pd.read_pickle('data.pickle') #Python读取pickle文件
-
- df_list_loaded #显示结果
text | label | |
---|---|---|
0 | [这, 是, 个, 好, 电影, ,, 我, 喜欢, !] | 1 |
1 | [这部, 剧, 的, 第八, 季, 糟透了, !] | 0 |
虽然结果同CSV/TSV相比,确实读取后的结果是不包含单引号的列表,但是有的数据分析包里不含pickle格式。那么我们可以用JSON格式。
第三种:
JSON格式:可以存储结构化数据(数据框,Excel),也可以存储非结构化数据。
- df_list.to_json('data.json',orient="records",lines=True)
- #orient="records"每一行数据单独以字典形式输出
- #lines=True去掉首尾的外部括号,并且每一行数据之间不加逗号
用everything软件找到本地的data.json文件并用文本编辑器如notepad打开后如下显示,这是由于汉字是Unicode存储:
{"text":["\u8fd9","\u662f","\u4e2a","\u597d","\u7535\u5f71","\uff0c","\u6211","\u559c\u6b22","\uff01"],"label":1}
{"text":["\u8fd9\u90e8","\u5267","\u7684","\u7b2c\u516b","\u5b63","\u7cdf\u900f\u4e86","\uff01"],"label":0}
- df_list_loaded_json=pd.read_json("data.json",orient="records",lines=True)
- df_list_loaded_json
text | label | |
---|---|---|
0 | [这, 是, 个, 好, 电影, ,, 我, 喜欢, !] | 1 |
1 | [这部, 剧, 的, 第八, 季, 糟透了, !] | 0 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。