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/