如何優雅地將dat, txt 或者excel 文件導入python?

實驗人員,在實驗中會得到一系列數據,類似於一個excel 文件很多列那種。需要以其中若干列作為坐標畫圖,請教如何優雅地將數據導入python, 方便下一步自由定義各列坐標畫圖?

最後,最好答案包含一段實現代碼。

-------------------------------------------------------------

看了答案,所以解釋一下。最近在家休假,所以谷歌什麼的搜索網站都不方便,做了一回伸手黨。。。


aaa.csv

-------------

&>&>&> import pandas as pd
&>&>&> data = pd.read_csv("aaa.csv")
&>&>&> data #查看錶格
x y z
0 1 2 Y
1 2 4 Y
2 3 8 Y
3 4 16 N
4 5 32 N
&>&>&> data.columns #查看錶格有哪些列,可以看到有x, y, z列
Index([u"x", u"y", u"z"], dtype="object")
&>&>&> data["x"] #查看x列
0 1
1 2
2 3
3 4
4 5
Name: x, dtype: int64
&>&>&> data["y"] #查看y列
0 2
1 4
2 8
3 16
4 32
Name: y, dtype: int64
&>&>&> data["z"] #查看z列
0 Y
1 Y
2 Y
3 N
4 N
Name: z, dtype: object
&>&>&> import matplotlib.pyplot as plt
&>&>&> plt.bar(data["x"], data["y"]) #畫柱狀圖
&
&>&>&> plt.title("example") #設置標題
&>&>&> plt.xlabel("x") #橫坐標加說明文字"x"
&
&>&>&> plt.ylabel("y") #縱坐標加說明文字"y"
&
&>&>&> plt.show() #顯示圖形


另存為成csv文件,然後直接用split函數進行分割獲取數據。


http://pandas.pydata.org/pandas-docs/stable/api.html#input-output


sys.stdin 可以按行讀取,然後自己寫列表推導式


為什麼一定要用python呢,你用excel寫一條公式,類似於:

=array("filter"=&>"A")

然後按住右下角的十字架,一直往下拖,一堆數組就出來了,然後用php寫進去就好了

#-*- coding: utf-8 -*-
#encoding=utf-8
import MySQLdb
import xlrd
#打開excel
data = xlrd.open_workbook("testpython.xls")
#根據名字拿到excel的某個表
table = data.sheet_by_name("Sheet1")
#行數
nrows = table.nrows
for rownum in range(1,nrows):
row = table.row_values(rownum)
print len(row)

# 打開資料庫連接
db = MySQLdb.connect("localhost","root","","pythonmysql" )
#鏈接資源
cursor = db.cursor()

# SQL 插入語句
sql = "insert into pyuser (username,password, email, qq) values("%s", "%s","%s","%s")" %
(row[0],row[1],row[2],row[3])
print sql
try:
# 執行sql語句
cursor.execute(sql)
# 提交到資料庫執行
db.commit()
except:
db.rollback()
# 關閉資料庫連接
db.close()


python操作Excel讀寫--使用xlrd


xlwt/xlrd

matplotlib

嗯這種東西谷歌一下不就有了么


Learn how to use Numpy


2015-07-28

http://book.douban.com/subject/10760444/ 一書中兩章:

Data Loading, Storage, and File Formats

Plotting and Visualization

其中 data loading 部分提到了 pandas 這個包。它能夠從 csv、xls 等等格式中載入數據。

如果經常做數據分析的話,不妨看一下這本書。

還有這一本:

Python科學計算 (豆瓣)

如果感覺 pandas 有點殺雞用牛刀了,就可以嘗試一些專門解析 xls 文件的庫,比如:

http://www.python-excel.org/

2015-11-18T14:59+08:00

Kenneth Reitz 大神的 tablib: kennethreitz/tablib · GitHub

--


前幾天剛看到的用Numpy的方法

假設想從txt/csv文檔讀取兩列數據:

import numpy as np
col1, col2 = np.loadtxt("文件路徑", skiprows=(讀取時需要跳過的行數), usecols=(1,2), unpack=True)

就好了


Python 將txt文件中的實驗數據導入數組

參考資料:Scipy官方文檔

1. 數據來源:D盤data.txt文件,如下圖所示:

0 1270.451

1 1270.371688

2 1270.133771

3 1269.737313

4 1269.182419

5 1268.469236

6 1267.677477

……

……

2. Python代碼

import numpy as np

file_name=r"D:data.txt"

# 將兩列數據分別導入x,y數組

x,y=np.loadtxt(filename,unpack="true")

# 如果沒有numpy庫,需要先再安裝numpy庫

3.作圖

運用matplotlib作圖

import pylab as plt

plt.plot(x,y)

plt.show()


for lines in file_test.readlines():
strdata = ",".join(lines.split(" "))
file_test2.write(strdata)

針對 .dat 文件,可以通過 split來分割,從而實現讀取。

或者直接把.dat 文件直接轉換成 .txt 格式,再用numpy進行讀寫。


關於python和excel,不推薦用xlrd和xlwt以及這兩個的開發者推薦的pyopenxl

python操作excel不要用xlrd或者xlwt或者openpyxl,這些都有很大的缺陷,xlrd只能讀但是不能與xlwt結合使用,openpyxl的文件保存了竟然不能夠修改了,xlwt和openpyxl竟然都不能讀已有的文件,是我太笨還是我沒找到wxrd和xlwt結合的方式呢。

可以考慮xlwings,如果你打算把圖畫在excel裡面,同時你也可以利用xlwings在jupyter notebook來操作xls。在數據量不大的情況下xlwings可以實現python和excel的良好實施交互,xlwings的目的主要代替excel的vba來對excel進行擴展。

其實pandas和numpy也非常好的選擇,我用過pandas,效果出奇的好。樓上有人說殺雞用牛刀,但是pandas效率、API的易用程度其實要好於xlrd的,各種行列數據操作,xlrd還是有點原始了。

所以綜上你可以在jupyter notebook下用pandas處理excel數據,然後利用matplotlib繪圖。或者在ipython命令行下。


def load_large_dta(fname):
import sys
reader = pd.read_stata(fname, iterator=True)
df = pd.DataFrame()
try:
chunk = reader.get_chunk(100*1000)
while len(chunk) &> 0:
df = df.append(chunk, ignore_index=True)
chunk = reader.get_chunk(100*1000)
print ".",
sys.stdout.flush()
except (StopIteration, KeyboardInterrupt):
pass
print "
loaded {} rows".format(len(df))
return df

相類似的讀取csv, json 有 pd.read_csv()pd.read_json()


求解答,這個為什麼不顯示東西,是空的,是我路徑寫錯了嗎?還是其他問題?


pandas你值得擁有!無論是從csv,還是資料庫,都沒有問題,處理起來也方便。


xlrt吧,我記的是先xlrd.open _workbook()

z再.sheet _name()[索引] ncol=.ncols

list=.col_values()

.是sheet_name

PS手機打字好燥


numpy.genfromtxt


不會優雅的,只會胡來,比如split,正則啥的


推薦閱讀:

如何用 Python 科學計算中的矩陣替代循環?
在使用pip list時出現DEPRECATION是怎麼回事?怎麼解決?

TAG:Python | Python庫 | Python入門 | Python使用技巧 | Python標準庫 |