1、python中Row binary I/O通常提供對底層操作系統(tǒng)設(shè)備或者API的低級訪問;
成都創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、萊蕪網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為萊蕪等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
2、Python是一種跨平臺的計算機程序設(shè)計語言,是一種面向?qū)ο蟮膭討B(tài)類型語言;
3、Python最初被設(shè)計用于編寫自動化腳本,隨著版本的不斷更新和語言新功能的添加,越多被用于獨立的、大型項目的開發(fā)。
擴展資料:
在開始之前,計算機將需要Python,但可能不需要下載。首先檢查有沒有安裝Python。看到了一個Python解釋器的響應(yīng),那么就能在顯示窗口中得到一個版本號,通常的版本都可以做到Python的向前兼容。
Python的設(shè)計目標(biāo)之一是讓代碼具備高度的可閱讀性。其設(shè)計時盡量使用其它語言經(jīng)常使用的標(biāo)點符號和英文單字,讓代碼看起來整潔美觀。不像其他的靜態(tài)語言如C、Pascal那樣需要重復(fù)書寫聲明語句,也不像它們的語法那樣經(jīng)常有特殊情況和意外。
參考資料來源:百度百科-Python
最近,Analysis with Programming加入了Planet Python。我這里來分享一下如何通過Python來開始數(shù)據(jù)分析。具體內(nèi)容如下:
數(shù)據(jù)導(dǎo)入
導(dǎo)入本地的或者web端的CSV文件;
數(shù)據(jù)變換;
數(shù)據(jù)統(tǒng)計描述;
假設(shè)檢驗
單樣本t檢驗;
可視化;
創(chuàng)建自定義函數(shù)。
數(shù)據(jù)導(dǎo)入
1
這是很關(guān)鍵的一步,為了后續(xù)的分析我們首先需要導(dǎo)入數(shù)據(jù)。通常來說,數(shù)據(jù)是CSV格式,就算不是,至少也可以轉(zhuǎn)換成CSV格式。在Python中,我們的操作如下:
import pandas as pd
# Reading data locally
df = pd.read_csv('/Users/al-ahmadgaidasaad/Documents/d.csv')
# Reading data from web
data_url = ""
df = pd.read_csv(data_url)
為了讀取本地CSV文件,我們需要pandas這個數(shù)據(jù)分析庫中的相應(yīng)模塊。其中的read_csv函數(shù)能夠讀取本地和web數(shù)據(jù)。
END
數(shù)據(jù)變換
1
既然在工作空間有了數(shù)據(jù),接下來就是數(shù)據(jù)變換。統(tǒng)計學(xué)家和科學(xué)家們通常會在這一步移除分析中的非必要數(shù)據(jù)。我們先看看數(shù)據(jù)(下圖)
對R語言程序員來說,上述操作等價于通過print(head(df))來打印數(shù)據(jù)的前6行,以及通過print(tail(df))來打印數(shù)據(jù)的后6行。當(dāng)然Python中,默認打印是5行,而R則是6行。因此R的代碼head(df, n = 10),在Python中就是df.head(n = 10),打印數(shù)據(jù)尾部也是同樣道理
請點擊輸入圖片描述
2
在R語言中,數(shù)據(jù)列和行的名字通過colnames和rownames來分別進行提取。在Python中,我們則使用columns和index屬性來提取,如下:
# Extracting column names
print df.columns
# OUTPUT
Index([u'Abra', u'Apayao', u'Benguet', u'Ifugao', u'Kalinga'], dtype='object')
# Extracting row names or the index
print df.index
# OUTPUT
Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78], dtype='int64')
3
數(shù)據(jù)轉(zhuǎn)置使用T方法,
# Transpose data
print df.T
# OUTPUT
0 ? ? ?1 ? ? 2 ? ? ?3 ? ? 4 ? ? ?5 ? ? 6 ? ? ?7 ? ? 8 ? ? ?9
Abra ? ? ?1243 ? 4158 ?1787 ?17152 ?1266 ? 5576 ? 927 ?21540 ?1039 ? 5424
Apayao ? ?2934 ? 9235 ?1922 ?14501 ?2385 ? 7452 ?1099 ?17038 ?1382 ?10588
Benguet ? ?148 ? 4287 ?1955 ? 3536 ?2530 ? ?771 ?2796 ? 2463 ?2592 ? 1064
Ifugao ? ?3300 ? 8063 ?1074 ?19607 ?3315 ?13134 ?5134 ?14226 ?6842 ?13828
Kalinga ?10553 ?35257 ?4544 ?31687 ?8520 ?28252 ?3106 ?36238 ?4973 ?40140
... ? ? ? 69 ? ? 70 ? ? 71 ? ? 72 ? ? 73 ? ? 74 ? ? 75 ? ? 76 ? ? 77
Abra ? ? ... ? ?12763 ? 2470 ?59094 ? 6209 ?13316 ? 2505 ?60303 ? 6311 ?13345
Apayao ? ... ? ?37625 ?19532 ?35126 ? 6335 ?38613 ?20878 ?40065 ? 6756 ?38902
Benguet ?... ? ? 2354 ? 4045 ? 5987 ? 3530 ? 2585 ? 3519 ? 7062 ? 3561 ? 2583
Ifugao ? ... ? ? 9838 ?17125 ?18940 ?15560 ? 7746 ?19737 ?19422 ?15910 ?11096
Kalinga ?... ? ?65782 ?15279 ?52437 ?24385 ?66148 ?16513 ?61808 ?23349 ?68663
78
Abra ? ? ?2623
Apayao ? 18264
Benguet ? 3745
Ifugao ? 16787
Kalinga ?16900
Other transformations such as sort can be done using codesort/code attribute. Now let's extract a specific column. In Python, we do it using either codeiloc/code or codeix/code attributes, but codeix/code is more robust and thus I prefer it. Assuming we want the head of the first column of the data, we have
4
其他變換,例如排序就是用sort屬性?,F(xiàn)在我們提取特定的某列數(shù)據(jù)。Python中,可以使用iloc或者ix屬性。但是我更喜歡用ix,因為它更穩(wěn)定一些。假設(shè)我們需數(shù)據(jù)第一列的前5行,我們有:
print df.ix[:, 0].head()
# OUTPUT 0 ? ? 1243 1 ? ? 4158 2 ? ? 1787 3 ? ?17152 4 ? ? 1266 Name: Abra, dtype: int64
5
順便提一下,Python的索引是從0開始而非1。為了取出從11到20行的前3列數(shù)據(jù),我們有
print df.ix[10:20, 0:3]
# OUTPUT
Abra ?Apayao ?Benguet
10 ? ?981 ? ?1311 ? ? 2560
11 ?27366 ? 15093 ? ? 3039
12 ? 1100 ? ?1701 ? ? 2382
13 ? 7212 ? 11001 ? ? 1088
14 ? 1048 ? ?1427 ? ? 2847
15 ?25679 ? 15661 ? ? 2942
16 ? 1055 ? ?2191 ? ? 2119
17 ? 5437 ? ?6461 ? ? ?734
18 ? 1029 ? ?1183 ? ? 2302
19 ?23710 ? 12222 ? ? 2598
20 ? 1091 ? ?2343 ? ? 2654
上述命令相當(dāng)于df.ix[10:20, ['Abra', 'Apayao', 'Benguet']]。
6
為了舍棄數(shù)據(jù)中的列,這里是列1(Apayao)和列2(Benguet),我們使用drop屬性,如下:
print df.drop(df.columns[[1, 2]], axis = 1).head()
# OUTPUT
Abra ?Ifugao ?Kalinga
0 ? 1243 ? ?3300 ? ?10553
1 ? 4158 ? ?8063 ? ?35257
2 ? 1787 ? ?1074 ? ? 4544
3 ?17152 ? 19607 ? ?31687
4 ? 1266 ? ?3315 ? ? 8520
axis?參數(shù)告訴函數(shù)到底舍棄列還是行。如果axis等于0,那么就舍棄行。
END
統(tǒng)計描述
1
下一步就是通過describe屬性,對數(shù)據(jù)的統(tǒng)計特性進行描述:
print df.describe()
# OUTPUT
Abra ? ? ? ?Apayao ? ? ?Benguet ? ? ? ?Ifugao ? ? ? Kalinga
count ? ? 79.000000 ? ? 79.000000 ? ?79.000000 ? ? 79.000000 ? ? 79.000000
mean ? 12874.379747 ?16860.645570 ?3237.392405 ?12414.620253 ?30446.417722
std ? ?16746.466945 ?15448.153794 ?1588.536429 ? 5034.282019 ?22245.707692
min ? ? ?927.000000 ? ?401.000000 ? 148.000000 ? 1074.000000 ? 2346.000000
25% ? ? 1524.000000 ? 3435.500000 ?2328.000000 ? 8205.000000 ? 8601.500000
50% ? ? 5790.000000 ?10588.000000 ?3202.000000 ?13044.000000 ?24494.000000
75% ? ?13330.500000 ?33289.000000 ?3918.500000 ?16099.500000 ?52510.500000
max ? ?60303.000000 ?54625.000000 ?8813.000000 ?21031.000000 ?68663.000000
END
假設(shè)檢驗
1
Python有一個很好的統(tǒng)計推斷包。那就是scipy里面的stats。ttest_1samp實現(xiàn)了單樣本t檢驗。因此,如果我們想檢驗數(shù)據(jù)Abra列的稻谷產(chǎn)量均值,通過零假設(shè),這里我們假定總體稻谷產(chǎn)量均值為15000,我們有:
from scipy import stats as ss
# Perform one sample t-test using 1500 as the true mean
print ss.ttest_1samp(a = df.ix[:, 'Abra'], popmean = 15000)
# OUTPUT
(-1.1281738488299586, 0.26270472069109496)
返回下述值組成的元祖:
t : 浮點或數(shù)組類型t統(tǒng)計量
prob : 浮點或數(shù)組類型two-tailed p-value 雙側(cè)概率值
2
通過上面的輸出,看到p值是0.267遠大于α等于0.05,因此沒有充分的證據(jù)說平均稻谷產(chǎn)量不是150000。將這個檢驗應(yīng)用到所有的變量,同樣假設(shè)均值為15000,我們有:
print ss.ttest_1samp(a = df, popmean = 15000)
# OUTPUT
(array([ -1.12817385, ? 1.07053437, -65.81425599, ?-4.564575 ?, ? 6.17156198]),
array([ ?2.62704721e-01, ? 2.87680340e-01, ? 4.15643528e-70,
1.83764399e-05, ? 2.82461897e-08]))
第一個數(shù)組是t統(tǒng)計量,第二個數(shù)組則是相應(yīng)的p值
END
可視化
1
Python中有許多可視化模塊,最流行的當(dāng)屬matpalotlib庫。稍加提及,我們也可選擇bokeh和seaborn模塊。之前的博文中,我已經(jīng)說明了matplotlib庫中的盒須圖模塊功能。
請點擊輸入圖片描述
2
# Import the module for plotting
import matplotlib.pyplot as plt
plt.show(df.plot(kind = 'box'))
現(xiàn)在,我們可以用pandas模塊中集成R的ggplot主題來美化圖表。要使用ggplot,我們只需要在上述代碼中多加一行,
import matplotlib.pyplot as plt
pd.options.display.mpl_style = 'default' # Sets the plotting display theme to ggplot2
df.plot(kind = 'box')
3
這樣我們就得到如下圖表:
請點擊輸入圖片描述
4
比matplotlib.pyplot主題簡潔太多。但是在本文中,我更愿意引入seaborn模塊,該模塊是一個統(tǒng)計數(shù)據(jù)可視化庫。因此我們有:
# Import the seaborn library
import seaborn as sns
# Do the boxplot
plt.show(sns.boxplot(df, widths = 0.5, color = "pastel"))
請點擊輸入圖片描述
5
多性感的盒式圖,繼續(xù)往下看。
請點擊輸入圖片描述
6
plt.show(sns.violinplot(df, widths = 0.5, color = "pastel"))
請點擊輸入圖片描述
7
plt.show(sns.distplot(df.ix[:,2], rug = True, bins = 15))
請點擊輸入圖片描述
8
with sns.axes_style("white"):
plt.show(sns.jointplot(df.ix[:,1], df.ix[:,2], kind = "kde"))
請點擊輸入圖片描述
9
plt.show(sns.lmplot("Benguet", "Ifugao", df))
END
創(chuàng)建自定義函數(shù)
在Python中,我們使用def函數(shù)來實現(xiàn)一個自定義函數(shù)。例如,如果我們要定義一個兩數(shù)相加的函數(shù),如下即可:
def add_2int(x, y):
return x + y
print add_2int(2, 2)
# OUTPUT
4
順便說一下,Python中的縮進是很重要的。通過縮進來定義函數(shù)作用域,就像在R語言中使用大括號{…}一樣。這有一個我們之前博文的例子:
產(chǎn)生10個正態(tài)分布樣本,其中和
基于95%的置信度,計算和?;
重復(fù)100次; 然后
計算出置信區(qū)間包含真實均值的百分比
Python中,程序如下:
import numpy as np
import scipy.stats as ss
def case(n = 10, mu = 3, sigma = np.sqrt(5), p = 0.025, rep = 100):
m = np.zeros((rep, 4))
for i in range(rep):
norm = np.random.normal(loc = mu, scale = sigma, size = n)
xbar = np.mean(norm)
low = xbar - ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))
up = xbar + ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))
if (mu low) (mu up):
rem = 1
else:
rem = 0
m[i, :] = [xbar, low, up, rem]
inside = np.sum(m[:, 3])
per = inside / rep
desc = "There are " + str(inside) + " confidence intervals that contain "
"the true mean (" + str(mu) + "), that is " + str(per) + " percent of the total CIs"
return {"Matrix": m, "Decision": desc}
上述代碼讀起來很簡單,但是循環(huán)的時候就很慢了。下面針對上述代碼進行了改進,這多虧了?Python專家
import numpy as np
import scipy.stats as ss
def case2(n = 10, mu = 3, sigma = np.sqrt(5), p = 0.025, rep = 100):
scaled_crit = ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))
norm = np.random.normal(loc = mu, scale = sigma, size = (rep, n))
xbar = norm.mean(1)
low = xbar - scaled_crit
up = xbar + scaled_crit
rem = (mu low) (mu up)
m = np.c_[xbar, low, up, rem]
inside = np.sum(m[:, 3])
per = inside / rep
desc = "There are " + str(inside) + " confidence intervals that contain "
"the true mean (" + str(mu) + "), that is " + str(per) + " percent of the total CIs"
return {"Matrix": m, "Decision": desc}
先花點時間來說說一個程序怎么和數(shù)據(jù)庫進行交互
1.和數(shù)據(jù)庫建立連接
2.執(zhí)行sql語句,接收返回值
3.關(guān)閉數(shù)據(jù)庫連接
使用MySQLdb也要遵循上面的幾步.讓我們一步步的進行.
1、MySQL數(shù)據(jù)庫要用MySQLdb模塊,但Python用來鏈接MySQL的第三方庫MySQLdb不支持Python3.x
特別說明:我在我的電腦上實驗時,我的python是2.7.2版本,安裝對應(yīng)版本的MySQLdb之后直接可以運行,并與數(shù)據(jù)庫連接成功,所以如果大家
也像我一樣順利的話,下面的就不需要看了,直接跳過,看第2點如何執(zhí)行sql語句即可!如果安裝之后出現(xiàn)異常,可以參考一下下面的解決辦法。
連接的關(guān)鍵是安裝MySQLdb模塊要下載與Python相對應(yīng)的版本:
下載好后安裝,它會自動檢測到計算機Python的安裝路徑,并自動填寫模塊解壓路徑(我的是:D:\ProgramFiles\ActivePython 2.6.6.17\Lib\site-packages\)。
但解壓完成后并不能使用,還要修改MySQLdb模塊下的一些文件:
①.在MySQLdb目錄下(我的是:D:\ProgramFiles\ActivePython 2.6.6.17\Lib\site-packages\MySQLdb)找到__init__.py:
注釋第34、35行的from setsimport ImmutableSet、class DBAPISet(ImmutableSet):,在后面添加class DBAPISet(frozenset):
# from sets import ImmutableSet
# class DBAPISet(ImmutableSet):
class DBAPISet(frozenset):
②.打開converters.py:
注釋第37行的from sets import BaseSet, Set,將第45行的return Set([ i for i in
s.split(',') ifi ])中的Set改為set;同樣將第129行的Set:
Set2Str,中的Set改為set(不要修改Set2Str),到這里就修改完畢了
2.建立數(shù)據(jù)庫連接
import MySQLdb
conn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="mytable")
比較常用的參數(shù)包括
host: 連接的數(shù)據(jù)庫服務(wù)器主機名,默認為本地主機(localhost)。
user:數(shù)據(jù)庫登陸名.默認是當(dāng)前用戶.
passwd:數(shù)據(jù)庫登陸的秘密.默認為空.
db:要使用的數(shù)據(jù)庫名.沒有默認值.
port:MySQL服務(wù)使用的TCP端口.默認是3306.
conn連接有兩個重要的方法commit【提交新增和修改】,rollback【撤銷新增或修改】
3、執(zhí)行數(shù)據(jù)庫操作
n=cursor.execute(sql,param)
我們要使用連接對象獲得一個cursor對象,接下來,我們會使用cursor提供的方法來進行工作.
這些方法包括兩大類:1.執(zhí)行命令,2.接收返回值
cursor用來執(zhí)行命令的方法:
callproc(self, procname, args):用來執(zhí)行存儲過程,接收的參數(shù)為存儲過程名和參數(shù)列表,返回值為受影響的行數(shù)
execute(self, query, args):執(zhí)行單條sql語句,接收的參數(shù)為sql語句本身和使用的參數(shù)列表,返回值為受影響的行數(shù)
executemany(self, query, args):執(zhí)行單挑sql語句,但是重復(fù)執(zhí)行參數(shù)列表里的參數(shù),返回值為受影響的行數(shù)
nextset(self):移動到下一個結(jié)果集
cursor用來接收返回值的方法:
fetchall(self):接收全部的返回結(jié)果行.
fetchmany(self, size=None):接收size條返回結(jié)果行.如果size的值大于返回的結(jié)果行的數(shù)量,則會返回cursor.arraysize條數(shù)據(jù).
fetchone(self):返回一條結(jié)果行.
scroll(self, value, mode='relative'):移動指針到某一行.如果mode='relative',則表示從當(dāng)前所在行移動value條,如果mode='absolute',則表示從結(jié)果集的第一行移動value條.
下面的代碼是一個完整的例子.
#使用sql語句,這里要接收的參數(shù)都用%s占位符.要注意的是,無論你要插入的數(shù)據(jù)是什么類型,占位符永遠都要用%s
sql="insert into cdinfo values(%s,%s,%s,%s,%s)"
#param應(yīng)該為tuple或者list
param=(title,singer,imgurl,url,alpha)
#執(zhí)行,如果成功,n的值為1
n=cursor.execute(sql,param)
#再來執(zhí)行一個查詢的操作
cursor.execute("select * from cdinfo")
#我們使用了fetchall這個方法.這樣,cds里保存的將會是查詢返回的全部結(jié)果.每條結(jié)果都是一個tuple類型的數(shù)據(jù),這些tuple組成了一個tuple
cds=cursor.fetchall()
#因為是tuple,所以可以這樣使用結(jié)果集
print cds[0][3]
#或者直接顯示出來,看看結(jié)果集的真實樣子
print cds
#如果需要批量的插入數(shù)據(jù),就這樣做
sql="insert into cdinfo values(0,%s,%s,%s,%s,%s)"
#每個值的集合為一個tuple,整個參數(shù)集組成一個tuple,或者list
param=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2))
#使用executemany方法來批量的插入數(shù)據(jù).這真是一個很酷的方法!
n=cursor.executemany(sql,param)
需要注意的是(或者說是我感到奇怪的是),在執(zhí)行完插入或刪除或修改操作后,需要調(diào)用一下
conn.commit()方法進行提交.這樣,數(shù)據(jù)才會真正保存在數(shù)據(jù)庫中.我不清楚是否是我的mysql設(shè)置問題,總之,今天我在一開始使用的時候,
如果不用commit,那數(shù)據(jù)就不會保留在數(shù)據(jù)庫中,但是,數(shù)據(jù)確實在數(shù)據(jù)庫呆過.因為自動編號進行了累積,而且返回的受影響的行數(shù)并不為0.
4、關(guān)閉數(shù)據(jù)庫連接
需要分別的關(guān)閉指針對象和連接對象.他們有名字相同的方法
cursor.close()
conn.close()
5、
5 編碼(防止亂碼)
需要注意的點:
1 Python文件設(shè)置編碼 utf-8 (文件前面加上 #encoding=utf-8)
2 MySQL數(shù)據(jù)庫charset=utf-8
3 Python連接MySQL是加上參數(shù) charset=utf8
4 設(shè)置Python的默認編碼為 utf-8 (sys.setdefaultencoding(utf-8)
#encoding=utf-8 import sys import MySQLdb reload(sys) sys.setdefaultencoding('utf-8') db=MySQLdb.connect(user='root',charset='utf8')
注:MySQL的配置文件設(shè)置也必須配置成utf8
6.模塊功能演示
#!/usr/bin/python
import MySQLdb
Con= MySQLdb.connect(host='localhost',user='root',passwd='root',db='abc')
cursor =con.cursor()
sql ="select * from myt"
cursor.execute(sql)
row=cursor.fetchone()
print row
cursor.close()
con.close()
執(zhí)行以下SQL語句獲取返回值:
//獲取連接的游標(biāo)
cursor=conn.cursor()
//查詢
sql = "select * from 【table】"
//新增
sql = "insert into 【table】(字段,字段) values(值,值)"
//修改
sql = "update 【table】 set 字段 =‘值’where 條件 "
//刪除
sql = "delete from 【table】where 條件"
cursor.execute(sql)
返回值
cur.execute('select * from tables')
其返回值為SQL語句得到的行數(shù),如:2L,表示2行。
然后,可以從該對象的fetchone或fetchall方法得到行信息。
獲取行信息
指針對象的fetchone()方法,是每次得到一行的tuple返回值:
引用
row=cur.fetchone()
print row
('user1', '52c69e3a57331081823331c4e69d3f2e', 1000L, 1000L, '/home/FTP/user1','')
指針對象的fetchall()方法,可取出指針結(jié)果集中的所有行,返回的結(jié)果集一個元組(tuples):
引用
cur.scroll(0,'absolute')
row=cur.fetchall()
print row
(('user1', '52c69e3a57331081823331c4e69d3f2e', 1000L, 1000L,
'/home/FTP/user1',''), ('user2', '7e58d63b60197ceb55a1c487989a3720',
1000L, 1000L,'/home/FTP/user2', None))
移動指針
當(dāng)使用fetchone()方法是,指針是會發(fā)生移動的。所以,若不重置指針,那么使用fetchall的信息將只會包含指針后面的行內(nèi)容。
手動移動指針使用:
cur.scroll(int,parm)
含義為:
引用
int:移動的行數(shù),整數(shù);在相對模式下,正數(shù)向下移動,負值表示向上移動。
parm:移動的模式,默認是relative,相對模式;可接受absoulte,絕對模式。
修改數(shù)據(jù)
修改數(shù)據(jù),包括插入、更新、刪除。它們都是使用指針對象的execute()方法執(zhí)行:
cur.execute("insert into table (row1, row2) values ('111', '222')")
cur.execute("update table set row1 = 'test' where row2 = 'row2' ")
cur.execute("delete from table where row1 = 'row1' ")
因單引號“'”用于SQL語句中的標(biāo)識,所以,python中的字符串需使用雙引號括住。
此外,也可以使用python的“格式化字符串”寫法,簡化命令,例如:
cur.execute("update table set row1 = '%s' where row2 = '%s' "%('value1','value2'))
※請注意,'%s'的單引號是SQL語句的間隔符,'value1'的單引號是python的字符串間隔符,其含義是不同的。是否需要間隔符,以及使用雙引號還是單引號作為間隔,需根據(jù)其含義決定。例如,還有:
cur.execute("update FTPUSERS set passwd=%s where userid='%s' "%("md5('123')",'user2'))
這里,paswd=%s是因SQL的md5()函數(shù)是不需要單引號間隔的;"md5('123')"是python的字符串中含有單引號,所以用雙引號括住。
提交修改
一般情況下,MySQLdb模塊會自動提交修改。但我們在更新數(shù)據(jù)后,手動運行一次:
conn.commit()
關(guān)閉數(shù)據(jù)庫連接
需要分別的關(guān)閉指針對象和連接對象.他們有名字相同的方法
cursor.close()
conn.close()
python是弱類型語言,在變量定義時,并不需要明確的給出數(shù)據(jù)的類型。所以row有可能是字符串、整型或是浮點型,這里使用int()函數(shù),是為了將row轉(zhuǎn)換為整型,最后重新賦值給row
使用pandas讀取的方法是
pandas.to_csv()
得到的結(jié)果是dataframe格式,再用numpy庫轉(zhuǎn)一下
具體代碼:
import pandas as pd
import numpy as np
file_content = pd.to_csv(r'C:\新建文件夾\result123.csv')
row = np.array(file_content)
lx = row.tolist()
這個是python的提示符!不是編輯器!不是編輯器??!不是編輯器?。?!
Ctrl +N,或者從File 菜單,new一個,如圖:
這才是編輯器!這才是編輯器??!這才是編輯器?。。?/p>
要運行點F5就行。