Python优越的灵活性和易用性使其成为最受欢迎的编程语言之一,尤为是对数据科学家而言。这在很大程度上是由于使用Python处理大型数据集是很简单的一件事情。python
现在,每家科技公司都在制定数据战略。他们都意识到,拥有正确的数据(干净、尽量多)会给他们带来关键的竞争优点。数据,若是使用有效,能够提供深层次的、隐藏在表象之下的信息。编程
多年来,数据存储的可能格式显著增长,可是,在平常使用中,仍是以CSV、JSON和XML占主导地位。在本文中,我将与你分享在Python中使用这三种流行数据格式及其之间相互转换的最简单方法!json
CSV文件是存储数据的最多见方式,你会发现,Kaggle竞赛中的大多数数据都是以这种方式存储的。咱们可使用Python内置的csv库读写CSV文件,一般,咱们将数据读入一个列表中,列表中每一个元素又是一个列表,表明一行数据。app
观察下面的代码,当咱们运行csv.reader()
时,就能够访问到咱们指定的CSV数据文件。而csvreader.next()
函数的做用是从CSV中读取一行,每次调用它,它都会移动到下一行。咱们还能够经过for row in csvreader
使用for循环遍历csv的每一行。另外,最好确保每一行的列数相同,不然,在处理列表时可能会遇到一些错误。编程语言
import csv
filename = "my_data.csv"
fields = []
rows = []
# 读取csv文件
with open(filename, 'r') as csvfile:
# 建立一个csv reader对象
csvreader = csv.reader(csvfile)
# 从文件中第一行中读取属性名称信息
# fields = next(csvreader) python3.2 以上的版本使用
fields = csvreader.next()
# 接着一行一行读取数据
for row in csvreader:
rows.append(row)
# 打印前5行信息
for row in rows[:5]:
print(row)ide
在Python将数据写入CSV也很容易,在一个单独的列表中设置属性名称,并将要写入的数据存储在一个列表中。这一次,咱们将建立一个writer()
对象,并使用它将数据写入文件,这与咱们读取数据的方式很是类似。函数
import csv
# 属性名称
fields = ['Name', 'Goals', 'Assists', 'Shots']
# csv文件中每一行的数据,一行为一个列表
rows = [ ['Emily', '12', '18', '112'],
['Katie', '8', '24', '96'],
['John', '16', '9', '101'],
['Mike', '3', '14', '82']]
filename = "soccer.csv"
# 将数据写入到csv文件中
with open(filename, 'w+') as csvfile:
# 建立一个csv writer对象
csvwriter = csv.writer(csvfile)
# 写入属性名称
csvwriter.writerow(fields)
# 写入数据
csvwriter.writerows(rows).net
固然,使用强大的pandas库将会使处理数据变得容易不少,从CSV读取和写入文件都只须要一行代码!code
咱们甚至可使用pandas经过一行代码快速将CSV转换为字典列表。转换为字典列表以后,咱们可使用dicttoxml
库将其转换为XML格式,咱们还能够将它保存为JSON文件!xml
import pandas as pd
from dicttoxml import dicttoxml
import json
# 建立一个DataFrame
data = {'Name': ['Emily', 'Katie', 'John', 'Mike'],
'Goals': [12, 8, 16, 3],
'Assists': [18, 24, 9, 14],
'Shots': [112, 96, 101, 82]
}
df = pd.DataFrame(data, columns=data.keys())
# 将DataFrame转化为一个字典而且将它存储到json文件中
data_dict = df.to_dict(orient="records")
with open('output.json', "w+") as f:
json.dump(data_dict, f, indent=4)
# 将DataFrame转化为一个字典而且将它存储到xml文件中
xml_data = dicttoxml(data_dict).decode()
with open("output.xml", "w+") as f:
f.write(xml_data)
JSON提供了一种干净且易于阅读的格式,由于它维护了一个字典风格的结构。就像CSV同样,Python有一个内置的json模块,使读写变得超级容易!从上面的例子能够看到当咱们读取CSV时,能够将数据以字典的形式存储,而后再将字典写入文件。
import json
import pandas as pd
# 使用json模块从json文件中读取数据
# 以字典形式存储
with open('data.json') as f:
data_listofdict = json.load(f)
# 也能够直接使用pandas直接读取json文件
data_df = pd.read_json('data.json', orient='records')
# 将字典数据保存为json文件
# 并使用 'indent' and 'sort_keys' 格式化json文件
with open('new_data.json', 'w+') as json_file:
json.dump(data_listofdict, json_file, indent=4, sort_keys=True)
# 也可使用pandas将字典结构的数据保存为json文件
export = data_df.to_json('new_data.json', orient='records')
正如咱们以前看到的,咱们能够经过pandas或者使用Python的内置csv模块轻松地将咱们的数据存储为CSV文件,而在转化为成XML时,咱们使用的是dicttoxml
库。
import json
import pandas as pd
import csv
# 从json文件中读取数据
# 数据存储在一个字典列表中
with open('data.json') as f:
data_listofdict = json.load(f)
# 以列表中的字典写入倒csv文件中
keys = data_listofdict[0].keys()
with open('saved_data.csv', 'w') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(data_listofdict)
XML有点不一样于CSV和JSON。一般,CSV和JSON因为其简单性而被普遍使用。它们读、写和解释起来既简单又快捷,不须要额外的工做,并且解析JSON或CSV是很是轻量级的。
另外一方面,XML每每数据量要大一些。你若是正在发送更多的数据,这意味着你须要更多的带宽、更多的存储空间和更多的运行时间。可是与JSON和CSV相比,XML确实具备一些额外的特性:你可使用名称空间来构建和共享标准结构、更好的继承表示,以及用XML schema、DTD等表示数据的行业标准化方法。
要读取XML数据,咱们将使用Python内置的XML模块的子模块ElementTree。这里,咱们可使用xmltodict
库将ElementTree对象转换为字典。一旦有了字典,咱们就能够像上面同样将字典换转换为CSV、JSON或pandas的 DataFrame !
import xml.etree.ElementTree as ET
import xmltodict
import json
tree = ET.parse('output.xml')
xml_data = tree.getroot()
xmlstr = ET.tostring(xml_data, encoding='utf8', method='xml')
data_dict = dict(xmltodict.parse(xmlstr))
print(data_dict)
with open('new_data_2.json', 'w+') as json_file:
json.dump(data_dict, json_file, indent=4, sort_keys=True)
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:http://pytorch.panchuang.net/