1、定義一個使用不定長參數(shù)的函數(shù),并在函數(shù)中打印出參數(shù)及其類型,統(tǒng)計傳入?yún)?shù)的個數(shù)
創(chuàng)新互聯(lián)專業(yè)提供成都主機托管四川主機托管成都服務(wù)器托管四川服務(wù)器托管,支持按月付款!我們的承諾:貴族品質(zhì)、平民價格,機房位于中國電信/網(wǎng)通/移動機房,服務(wù)器托管服務(wù)有保障!
def test(a,b,*args,c=10,**kwargs): ??
print("a=",a)
print("b=",b)
print("args=",args)
print("c=",c)
print("kwargs=",kwargs)
print("參數(shù)總長度:",1+1+len(args)+1+len(kwargs))
test(1,2,3,4,5,m=4)
def test(a,b,c=10,*args,**kwargs): ? ?
print("a=",a)
print("b=",b)
print("args=",args)
print("c=",c)
print("kwargs=",kwargs)
print("參數(shù)總長度:",1+1+len(args)+1+len(kwargs))
test(1,2,3,4,5,m=4)
2、定義一個函數(shù)max,接受的參數(shù)類型是數(shù)值,最終返回兩個數(shù)中的最大值
def max(num1,num2):
if num1num2:
return num1
else:
return num2
3、定義一個函數(shù)min,接受的參數(shù)類型是數(shù)值,最終返回兩個數(shù)中的最小值
def min(num1,num2):
if num1num2:
return num1
else:
return num2
4、分別定義加減乘除四個函數(shù)實現(xiàn)兩個數(shù)之間的加減乘除操作
# 加法
def add(a,b):
return a+b
# 減法
def sub(a,b):
return a-b
# 乘法
def mul(a,b):
return a*b
# 除法
def div(a,b):
if b==0:
return 0
else:
return a/b
5、分別定義加減乘除四個函數(shù),然后實現(xiàn)多個數(shù)之間的累加累減累除累乘操作,如[1,2,3,4,5],累加即是1+2+3+4+5,注意當使用除法時,應(yīng)判斷被除數(shù)不能為0
#累加
def add(a,b,*args):
s=a+b
for i in args:
s=s+i
return s
#累減
def sub(a,b,*args):
s=a-b
for i in args:
s=s-i
return s
#累乘
def mul(a,b,*args):
s=a*b
for i in args:
s=s*i
return s
#累除
def div(a,b,*args):
if b==0:
return a
else:
s=a/b
for i in args:
if i ==0:
continue
else:
s=a/b
return s
6、使用不定長參數(shù)定義一個函數(shù)max_min,接受的參數(shù)類型是數(shù)值,最終返回這些數(shù)中的最大值和最小值——錯題
def max_min(*args):
max=0
min=0
if len(args)==0:
return 0,0
elif len(args)==1:
return args[0],args[0]
else:
max=args[0]
min=args[0]
for i in args:
if maxi:
max=i
if mini:
min=i
return max,min
7、定義一個函數(shù),返回n的階乘的最后結(jié)果,并打印出如5階乘"5!=120”的效果——錯題
def f(n):
s=1
for i in range(n):
s=s*(i+1)
print('%s!=%s' %(n,s))?
f(5)
8、定義一個函數(shù),返回由n(包含n)以內(nèi)的奇數(shù)或者偶數(shù)組成的列表,默認返回全是奇數(shù)的列表
def?f(n,type='j'):
ls=[]
if?type=='j':
for?i?in?range(1,n+1):
if?i%2==1:
ls.append(i)
if?type=='o':
for?i?in?range(1,n+1):
if?i%2==0:
ls.append(i)
return?ls
9、定義一個函數(shù),打印出n以內(nèi)的所有的素數(shù)(指在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)的自然數(shù)。)——錯題
def f(n):
ls=[2]
for i in range(3,n):
for j in range(2,i):
if i%j == 0:
break
else:
ls.append(i)
print(ls)
10、定義一個函數(shù),接受三個參數(shù),分別為字符串s、數(shù)值a1、數(shù)值a2,將字符串s從下標a1開始的a2個字符刪除,并把結(jié)果返回,a2默認值為0——錯題
def cut_str(s,a1,a2=0):
length = len(s)
if a1+1length or a2 == 0:
return s
else:
s1 = s[:a1]
s2 = s[a1+a2:]
return s1+s2
print(cut_str("hello",6,1))
11、請定義兩個函數(shù),一個函數(shù)畫正方形,一個函數(shù)畫三角形,并且可以從鍵盤輸入值來決定畫正方形還是畫三角形以及決定是否退出程序
我的答案:
import turtle
def z():
for i in range(4):
turtle.fd(20)
turtle.right(90)
def s():
for i in range(3):
turtle.fd(20)
turtle.right(120)
m=input('請輸入值,z畫正方形,s畫三角形,其它任意鍵退出程序:')
if m =='z':
z()
elif m=='s':
s()
else:
print('退出程序')
官方答案:
def square(n):
for i in range(n):
print("*"*n)
def triangle(n):
for i in range(n):
print("*"*(i+1))
12、定義函數(shù)findall,實現(xiàn)對字符串find方法的進一步封裝,要求返回符合要求的所有位置的起始下標,如字符串"helloworldhellopythonhelloc++hellojava",需要找出里面所有的"hello"的位置,最后將返回一個元組(0,10,21,29),即將h的下標全部返回出來,而find方法只能返回第一個——沒懂
def findall(string, s):
ret = []
if s=='':
return ret
while True:
index = string.find(s)
if index != -1:
if len(ret)!=0:
ret.append(ret[-1]+index+len(s))
else:
ret.append(index)
string = string[index+len(s):]
else:
break
return ret
print(findall("abc-abc-abc-","-"))
將Excel中的的數(shù)據(jù)讀入數(shù)據(jù)框架DataFrame后,可以非常方便的進行各種數(shù)據(jù)處理。
21.1 列間求和
求總分(總分=語文+數(shù)學+英語)
對于上一章所提到的學生成績表,僅用一個語句即可完成總分計算,并填充。
df['總分']=df['語文']+df['數(shù)學']+df['英語']
完整代碼如下:
from pandas import read_excel
file='d:/student.xlsx' #見第18章表18-1
df=read_excel(file,sheet_name=0,converters={'學號':str})
df['總分']=df['語文']+df['數(shù)學']+df['英語']
print(df.head()) #df.head()的作用是僅顯示5行記錄。
運行結(jié)果如下:
序號 學號 姓名 年級 班級 語文 數(shù)學 英語 總分 名次
0 1 070101 王博宇 NaN NaN 84 71 93 248 NaN
1 2 070102 陳冠濤 NaN NaN 89 89 89 267 NaN
2 3 070103 李文博 NaN NaN 89 72 76 237 NaN
3 4 070204 姜海燕 NaN NaN 89 89 89 267 NaN
4 5 070205 林若溪 NaN NaN 91 95 83 269 NaN
21.2替換
既可以將對滿足條件的行和列的數(shù)據(jù)替換,也可以對整個集合的數(shù)據(jù)按照條件進行替換。
df['總分'].replace(310,'x',inplace=True)
將總分列的數(shù)值“310”替換為“x”。inplace=True表示改變原數(shù)據(jù)。
df.replace(76,0,inplace=True)
將整個DataFrame中的數(shù)值“76”替換為“0”。
df.replace([98,76,99],0,inplace=True)
將整個DataFrame中的數(shù)值“98,76,99”一次替換為“0”。
21.2排序
既可以將某一列作為關(guān)鍵字段排序,也可以將幾個列分別作為主、次關(guān)鍵字段進行排序。排序既可以按升序排序,也可以按降序排序。
函數(shù)sort_values()的語法格式如下:
df.sort_values(by=[“col1”,”col2”,......,”coln”],ascending=False)
其中,coln表示列名,也可以是列名的列表;ascending表示排序方式,值為True表示升序,可以省缺,值為False表示降序。
如:
df=df.sort_values(by=['總分'],ascending=False)
表示按照“總分”從高到低排序。
df=df.sort_values(by=['總分','語文'],ascending=False)
表示按照“總分”從高到低排序,若“總分”相同,再按照“語文”成績從高到低排序。
21.3 字段截取
函數(shù)slice()可以從某列中截取字符串。格式如下:
slice(start,stop)
其中,start表示開始位置;stop表示結(jié)束位置
例:
df['年級']=df['學號'].str.slice(0,2)
通過此語句可以截取學號字段的第1、2個字符,并賦值給年級字段。
21.4 記錄抽取
可以抽取滿足條件的記錄。
例:抽取總分300的記錄。
df[df.總分300]
抽取總分在300到310之間(包括300和310)的記錄。
df[df.總分.between(306,310)]
抽取學號中包含“0803”的記錄。這樣可以非常方便的抽取某個班的信息。
df[df.學號.str.contains('0803',na=False)]
此處的na=False,含義是如遇到NaN這樣的數(shù)據(jù),直接做不匹配處理。
21.5修改記錄
1、整列替換
我們在前面已經(jīng)給整列填充過數(shù)據(jù),填充時原來的數(shù)據(jù)就被覆蓋了。
即如下語句:
df['總分']=df['語文']+df['數(shù)學']+df['英語']
2、個別修改
如將值‘99’替換為值‘100’,可用如下語句:
df.replace('99','100')
將指定列的值替,如將語文列和英語列的值‘99’替換為值‘100’,可用如下語句:
df.replace({'語文':99,'英語':99},100)
可用如下程序去驗證:
from pandas import read_excel
file='d:/student.xlsx'
df=read_excel(file,sheet_name=0,converters={'學號':str})
print(df[(df.語文==99) |(df.英語==99)])
df=df.replace({'語文':99,'英語':99},100)
print(df[(df.語文==99) |(df.英語==99)])
運行結(jié)果為:
序號 學號 姓名 年級 班級 語文 數(shù)學 英語 總分 名次
28 29 090802 丁能通 09 NaN 119 120 99 338 NaN
29 30 090203 沈丹妮 09 NaN 109 108 99 316 NaN
Empty DataFrame
Columns: [序號, 學號, 姓名, 年級, 班級, 語文, 數(shù)學, 英語, 總分, 名次]
Index: []
可以看出,第一個print()語句輸出的結(jié)果中滿足條件“語文或英語為99分”的有兩條記錄,替換語句執(zhí)行以后,df中再沒有滿足條件“語文或英語為99分”的記錄了。
21.6記錄合并
函數(shù)concat()的格式如下:
concat([dataFrame1,dataFrame2,......],ignore_index=True)
其中,dataFrame1等表示要合并的DataFrame數(shù)據(jù)集合;ignore_index=True表示合并之后的重新建立索引。其返回值也是DataFrame類型。
concat()函數(shù)和append()函數(shù)的功能非常相似。
例:
import pandas #導(dǎo)入pandas模塊
from pandas import read_excel #導(dǎo)入read_execel
file='d:/student.xlsx' #變量file表示文件路徑,注意'/'的用法 數(shù)據(jù)見第18章表18-1
df=read_excel(file,sheet_name=0,converters={'學號':str})
# 將Excel文件導(dǎo)入到DataFrame變量中
df=df[:5] #截取df的前5個記錄
print(df) #輸出df
df1=df[:3] #截取df的前3個記錄存入df1中
df2=df[3:5] #截取df的最后2個記錄存入df2中
df3=pandas.concat([df2,df1]) #將df2與df1合并存入df3中
print(df3) #輸出df3
運行結(jié)果如下:
序號 學號 姓名 年級 班級 語文 數(shù)學 英語 總分 名次
0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN
1 2 070102 陳冠濤 NaN NaN 89 89 89 NaN NaN
2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN
3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN
4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
序號 學號 姓名 年級 班級 語文 數(shù)學 英語 總分 名次
3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN
4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN
1 2 070102 陳冠濤 NaN NaN 89 89 89 NaN NaN
2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN
由于合并時是將df1合并到df2中,可以看出,索引仍然保持原來的狀態(tài)。
21.7統(tǒng)計次數(shù)
可以用如下方法統(tǒng)計出某個值在某行或者某個范圍出現(xiàn)的次數(shù)。
from pandas import read_excel
file='d:/student.xlsx'
df=read_excel(file,sheet_name=0,converters={'學號':str})
df=df[:5]
print(df)
print(df['語文'].value_counts())
輸出結(jié)果如下:
序號 學號 姓名 年級 班級 語文 數(shù)學 英語 總分 名次
0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN
1 2 070102 陳冠濤 NaN NaN 89 89 89 NaN NaN
2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN
3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN
4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
89 3
84 1
91 1
Name: 語文, dtype: int64
可以看出,通過value_counts()函數(shù)可以統(tǒng)計出列中各值出現(xiàn)的次數(shù)。
value_counts()函數(shù)的參數(shù)還有 :
ascending,當ascending=True時升序排列,當ascending=False時升序排列(此時該參數(shù)可省缺);
normalize,當normalize=True時,顯示的不再是各值出現(xiàn)的次數(shù),而是占比。
將上例中的語句print(df['語文'].value_counts())改為:
print(df['語文'].value_counts(ascending=True,normalize=True))
則輸出結(jié)果變成了:
91 0.2
84 0.2
89 0.6
Name: 語文, dtype: float64
21.8按值查找
print(df['語文'].isin([84,91]))
它的作用是查找‘語文’列中值和isin所指的列表中元素一致的記錄,如果找到結(jié)果為True,否則為False。
輸出結(jié)果:
0 True
1 False
2 False
3 False
4 True
Name: 語文, dtype: bool
21.9數(shù)據(jù)分區(qū)
根據(jù)某個分區(qū)標準,將數(shù)據(jù)按照所屬區(qū)域進行劃分,并用相應(yīng)的標簽表示,可以用cut()方法來實現(xiàn)。
語法格式如下:
cut(series, bins, right=True, labels=NULL)
其中:
series表示需要分組的數(shù)據(jù);
bins表示分組的依據(jù),是一個列表,其元素為劃分分區(qū)的邊界值,如[0,72,96,120],就是劃分3個分區(qū),即0~72、72~96、96~120,默認的是“左包右不包”;
right表示分組時右邊是否閉合;
labels表示分組的自定義標簽,也可以不重新定義。
下面對上述學生成績表中的語文成績進行分組,并增加一個新的列“語文等級”。
import pandas as pd
from pandas import read_excel #導(dǎo)入read_execel
file='d:/student.xlsx'
df=read_excel(file,sheet_name=0,converters={'學號':str})
df['年級']=df['學號'].str.slice(0,2)
df['班級']=df['學號'].str.slice(0,4)
df.總分=df.語文+df.數(shù)學+df.英語
bins=[0,72,96,max(df.語文)+1] #
lab=['不及格','及格','優(yōu)秀']
grade=pd.cut(df.語文,bins,right=False,labels=lab)
df['語文等級']=grade
print(df.head())
print("語文成績分等級統(tǒng)計結(jié)果:")
print(df['語文等級'].value_counts())
運行結(jié)果如下:
序號 學號 姓名 年級 班級 語文 數(shù)學 英語 總分 語文等級
0 1 070101 王博宇 07 0701 84 71 93 248 及格
1 2 070102 陳冠濤 07 0701 89 89 89 267 及格
2 3 070103 李文博 07 0701 89 72 76 237 及格
3 4 070204 姜海燕 07 0702 89 89 89 267 及格
4 5 070205 林若溪 07 0702 91 95 83 269 及格
語文成績分等級統(tǒng)計結(jié)果:
及格 17
優(yōu)秀 10
不及格 4
Name: 語文等級, dtype: int64
python支持eval函數(shù),可以把一個字符串當作python語句執(zhí)行,具體你可以看看eval函數(shù)的使用方法
奧巴馬的競選資金是一點點從選民那里募集來的。如獲黨內(nèi)提名,可得政府拔款,但也沒多少。美國大選不僅禁外國人捐款,而且禁止公司機構(gòu)捐款,而只允許個人捐款。不僅如此,還為個人捐款限制了上限,防止富人捐過多的款而影響未來的公平執(zhí)政。
不僅富人自己不能多捐,如果某個老板呼吁自己的員工給某人捐錢或投票支持他,都是犯法的。因此,想要籌到幾千萬競爭資金,唯一的辦法是爭取更多選民支持,一點點募集。所以,中國、公司、大筆捐款,這三條都是犯法的。
我記得以前已經(jīng)有華人鬧過這種丑聞了。美國的選舉法就是要嚴防少數(shù)人企圖用幾個臭錢影響美國的政治。所以我們作為外國人就更別去自討沒趣了。
導(dǎo)入包
In [1]:
import numpy as npimport pandas as pdfrom pandas import Series,DataFrame
方便大家操作,將月份和參選人以及所在政黨進行定義
In [2]:
months = {'JAN' : 1, 'FEB' : 2, 'MAR' : 3, 'APR' : 4, 'MAY' : 5, 'JUN' : 6, 'JUL' : 7, 'AUG' : 8, 'SEP' : 9, 'OCT': 10, 'NOV': 11, 'DEC' : 12}of_interest = ['Obama, Barack', 'Romney, Mitt', 'Santorum, Rick', 'Paul, Ron', 'Gingrich, Newt']parties = { 'Bachmann, Michelle': 'Republican', 'Romney, Mitt': 'Republican', 'Obama, Barack': 'Democrat', "Roemer, Charles E. 'Buddy' III": 'Reform', 'Pawlenty, Timothy': 'Republican', 'Johnson, Gary Earl': 'Libertarian', 'Paul, Ron': 'Republican', 'Santorum, Rick': 'Republican', 'Cain, Herman': 'Republican', 'Gingrich, Newt': 'Republican', 'McCotter, Thaddeus G': 'Republican', 'Huntsman, Jon': 'Republican', 'Perry, Rick': 'Republican' }
讀取文件
In [3]:
table = pd.read_csv('data/usa_election.txt')table.head()
C:\jupyter\lib\site-packages\IPython\core\interactiveshell.py:2785: DtypeWarning: Columns (6) have mixed types. Specify dtype option on import or set low_memory=False. interactivity=interactivity, compiler=compiler, result=result)
Out[3]:
cmte_id cand_id cand_nm contbr_nm contbr_city contbr_st contbr_zip contbr_employer contbr_occupation contb_receipt_amt contb_receipt_dt receipt_desc memo_cd memo_text form_tp file_num
0 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 250.0 20-JUN-11 NaN NaN NaN SA17A 736166
1 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 50.0 23-JUN-11 NaN NaN NaN SA17A 736166
2 C00410118 P20002978 Bachmann, Michelle SMITH, LANIER LANETT AL 3.68633e 08 INFORMATION REQUESTED INFORMATION REQUESTED 250.0 05-JUL-11 NaN NaN NaN SA17A 749073
3 C00410118 P20002978 Bachmann, Michelle BLEVINS, DARONDA PIGGOTT AR 7.24548e 08 NONE RETIRED 250.0 01-AUG-11 NaN NaN NaN SA17A 749073
4 C00410118 P20002978 Bachmann, Michelle WARDENBURG, HAROLD HOT SPRINGS NATION AR 7.19016e 08 NONE RETIRED 300.0 20-JUN-11 NaN NaN NaN SA17A 736166
In [8]:
#使用map函數(shù) 字典,新建一列各個候選人所在黨派partytable['party'] = table['cand_nm'].map(parties)table.head()
Out[8]:
cmte_id cand_id cand_nm contbr_nm contbr_city contbr_st contbr_zip contbr_employer contbr_occupation contb_receipt_amt contb_receipt_dt receipt_desc memo_cd memo_text form_tp file_num party
0 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 250.0 20-JUN-11 NaN NaN NaN SA17A 736166 Republican
1 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 50.0 23-JUN-11 NaN NaN NaN SA17A 736166 Republican
2 C00410118 P20002978 Bachmann, Michelle SMITH, LANIER LANETT AL 3.68633e 08 INFORMATION REQUESTED INFORMATION REQUESTED 250.0 05-JUL-11 NaN NaN NaN SA17A 749073 Republican
3 C00410118 P20002978 Bachmann, Michelle BLEVINS, DARONDA PIGGOTT AR 7.24548e 08 NONE RETIRED 250.0 01-AUG-11 NaN NaN NaN SA17A 749073 Republican
4 C00410118 P20002978 Bachmann, Michelle WARDENBURG, HAROLD HOT SPRINGS NATION AR 7.19016e 08 NONE RETIRED 300.0 20-JUN-11 NaN NaN NaN SA17A 736166 Republican
In [10]:
#party這一列中有哪些元素table['party'].unique()
Out[10]:
array(['Republican', 'Democrat', 'Reform', 'Libertarian'], dtype=object)
In [ ]:
#使用value_counts()函數(shù),統(tǒng)計party列中各個元素出現(xiàn)次數(shù),value_counts()是Series中的,無參,返回一個帶有每個元素出現(xiàn)次數(shù)的Series
In [11]:
table['party'].value_counts()
Out[11]:
Democrat 292400Republican 237575Reform 5364Libertarian 702Name: party, dtype: int64
In [12]:
#使用groupby()函數(shù),查看各個黨派收到的政治獻金總數(shù)contb_receipt_amttable.groupby(by='party')['contb_receipt_amt'].sum()
Out[12]:
partyDemocrat 8.105758e 07Libertarian 4.132769e 05Reform 3.390338e 05Republican 1.192255e 08Name: contb_receipt_amt, dtype: float64
In [13]:
#查看具體每天各個黨派收到的政治獻金總數(shù)contb_receipt_amt 。使用groupby([多個分組參數(shù)])table.groupby(by=['party','contb_receipt_dt'])['contb_receipt_amt'].sum()
Out[13]:
party contb_receipt_dtDemocrat 01-AUG-11 175281.00 01-DEC-11 651532.82 01-JAN-12 58098.80 01-JUL-11 165961.00 01-JUN-11 145459.00 01-MAY-11 82644.00 01-NOV-11 122529.87 01-OCT-11 148977.00 01-SEP-11 403297.62 02-AUG-11 164510.11 02-DEC-11 216056.96 02-JAN-12 89743.60 02-JUL-11 17105.00 02-JUN-11 422453.00 02-MAY-11 396675.00 02-NOV-11 147183.81 02-OCT-11 62605.62 02-SEP-11 137948.41 03-AUG-11 147053.02 03-DEC-11 81304.02 03-JAN-12 87406.97 03-JUL-11 5982.00 03-JUN-11 320176.20 03-MAY-11 261819.11 03-NOV-11 119304.56 03-OCT-11 363061.02 03-SEP-11 45598.00 04-APR-11 640235.12 04-AUG-11 598784.23 04-DEC-11 72795.10 ... Republican 29-AUG-11 941769.23 29-DEC-11 428501.42 29-JAN-11 750.00 29-JAN-12 75220.02 29-JUL-11 233423.35 29-JUN-11 1340704.29 29-MAR-11 38875.00 29-MAY-11 8363.20 29-NOV-11 407322.64 29-OCT-11 81924.01 29-SEP-11 1612794.52 30-APR-11 43004.80 30-AUG-11 915548.58 30-DEC-11 492470.45 30-JAN-12 255204.80 30-JUL-11 12249.04 30-JUN-11 2744932.63 30-MAR-11 50240.00 30-MAY-11 17803.60 30-NOV-11 809014.83 30-OCT-11 43913.16 30-SEP-11 4886331.76 31-AUG-11 1017735.02 31-DEC-11 1094376.72 31-JAN-11 6000.00 31-JAN-12 869890.41 31-JUL-11 12781.02 31-MAR-11 62475.00 31-MAY-11 301339.80 31-OCT-11 734601.83Name: contb_receipt_amt, Length: 1183, dtype: float64
In [14]:
def trasform_date(d): day,month,year = d.split('-') month = months[month] return "20" year '-' str(month) '-' day
In [17]:
#將表中日期格式轉(zhuǎn)換為'yyyy-mm-dd'。日期格式,通過函數(shù)加map方式進行轉(zhuǎn)換table['contb_receipt_dt'] = table['contb_receipt_dt'].apply(trasform_date)
In [18]:
table.head()
Out[18]:
cmte_id cand_id cand_nm contbr_nm contbr_city contbr_st contbr_zip contbr_employer contbr_occupation contb_receipt_amt contb_receipt_dt receipt_desc memo_cd memo_text form_tp file_num party
0 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 250.0 2011-6-20 NaN NaN NaN SA17A 736166 Republican
1 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 50.0 2011-6-23 NaN NaN NaN SA17A 736166 Republican
2 C00410118 P20002978 Bachmann, Michelle SMITH, LANIER LANETT AL 3.68633e 08 INFORMATION REQUESTED INFORMATION REQUESTED 250.0 2011-7-05 NaN NaN NaN SA17A 749073 Republican
3 C00410118 P20002978 Bachmann, Michelle BLEVINS, DARONDA PIGGOTT AR 7.24548e 08 NONE RETIRED 250.0 2011-8-01 NaN NaN NaN SA17A 749073 Republican
4 C00410118 P20002978 Bachmann, Michelle WARDENBURG, HAROLD HOT SPRINGS NATION AR 7.19016e 08 NONE RETIRED 300.0 2011-6-20 NaN NaN NaN SA17A 736166 Republican
In [19]:
#查看老兵(捐獻者職業(yè))DISABLED VETERAN主要支持誰 :查看老兵們捐贈給誰的錢最多table['contbr_occupation'] == 'DISABLED VETERAN'
Out[19]:
0 False1 False2 False3 False4 False5 False6 False7 False8 False9 False10 False11 False12 False13 False14 False15 False16 False17 False18 False19 False20 False21 False22 False23 False24 False25 False26 False27 False28 False29 False ... 536011 False536012 False536013 False536014 False536015 False536016 False536017 False536018 False536019 False536020 False536021 False536022 False536023 False536024 False536025 False536026 False536027 False536028 False536029 False536030 False536031 False536032 False536033 False536034 False536035 False536036 False536037 False536038 False536039 False536040 FalseName: contbr_occupation, Length: 536041, dtype: bool
In [21]:
old_bing_df = table.loc[table['contbr_occupation'] == 'DISABLED VETERAN']
In [22]:
old_bing_df.groupby(by='cand_nm')['contb_receipt_amt'].sum()
Out[22]:
cand_nmCain, Herman 300.00Obama, Barack 4205.00Paul, Ron 2425.49Santorum, Rick 250.00Name: contb_receipt_amt, dtype: float64
In [23]:
table['contb_receipt_amt'].max()
Out[23]:
1944042.43
In [24]:
#找出候選人的捐贈者中,捐贈金額最大的人的職業(yè)以及捐獻額 .通過query("查詢條件來查找捐獻人職業(yè)")table.query('contb_receipt_amt == 1944042.43')
Out[24]:
cmte_id cand_id cand_nm contbr_nm contbr_city contbr_st contbr_zip contbr_employer contbr_occupation contb_receipt_amt contb_receipt_dt receipt_desc memo_cd memo_text form_tp file_num party
176127 C00431445 P80003338 Obama, Barack OBAMA VICTORY FUND 2012 - UNITEMIZED CHICAGO IL 60680 NaN NaN 1944042.43 2011-12-31 NaN X * SA18 763233 Democrat
來源:
python jieba.cut 要切分的句子中含有數(shù)字怎么辦
jieba分詞得出的結(jié)果既不是string,也不是list.具體是什么類型的我也不記得了。 如果把得出的結(jié)果轉(zhuǎn)換成list就好辦了。列如: import jieba s = '一些亂七八糟的字符串‘ s= list(jieba.cut(s,cut_all=False)) for i in s: #就能寫入文本了。
最復(fù)雜的就是這一行了: (word for word in jieba.cut(line,HMM=True)if word not in stop and len(word.strip())1) jieba.cut(line)將一行字符串,分割成一個個單詞 word for word in jieba.cut(line,HMM=True)是一個Python的表理解
1、print()函數(shù):打印字符串;
2、raw_input()函數(shù):從用戶鍵盤捕獲字符;
3、len()函數(shù):計算字符長度;
4、format()函數(shù):實現(xiàn)格式化輸出;
5、type()函數(shù):查詢對象的類型;
6、int()函數(shù)、float()函數(shù)、str()函數(shù)等:類型的轉(zhuǎn)化函數(shù);
7、id()函數(shù):獲取對象的內(nèi)存地址;
8、help()函數(shù):Python的幫助函數(shù);
9、s.islower()函數(shù):判斷字符小寫;
10、s.sppace()函數(shù):判斷是否為空格;
11、str.replace()函數(shù):替換字符;
12、import()函數(shù):引進庫;
13、math.sin()函數(shù):sin()函數(shù);
14、math.pow()函數(shù):計算次方函數(shù);
15、os.getcwd()函數(shù):獲取當前工作目錄;
16、listdir()函數(shù):顯示當前目錄下的文件;
17、time.sleep()函數(shù):停止一段時間;
18、random.randint()函數(shù):產(chǎn)生隨機數(shù);
19、range()函數(shù):返回一個列表,打印從1到100;
20、file.read()函數(shù):讀取文件返回字符串;
21、file.readlines()函數(shù):讀取文件返回列表;
22、file.readline()函數(shù):讀取一行文件并返回字符串;
23、split()函數(shù):用什么來間隔字符串;
24、isalnum()函數(shù):判斷是否為有效數(shù)字或字符;
25、isalpha()函數(shù):判斷是否全為字符;
26、isdigit()函數(shù):判斷是否全為數(shù)字;
27、 lower()函數(shù):將數(shù)據(jù)改成小寫;
28、upper()函數(shù):將數(shù)據(jù)改成大寫;
29、startswith(s)函數(shù):判斷字符串是否以s開始的;
30、endwith(s)函數(shù):判斷字符串是否以s結(jié)尾的;
31、file.write()函數(shù):寫入函數(shù);
32、file.writeline()函數(shù):寫入文件;
33、abs()函數(shù):得到某數(shù)的絕對值;
34、file.sort()函數(shù):對書數(shù)據(jù)排序;
35、tuple()函數(shù):創(chuàng)建一個元組;
36、find()函數(shù):查找 返回的是索引;
37、dict()函數(shù):創(chuàng)建字典;
38、clear()函數(shù):清楚字典中的所有項;
39、copy()函數(shù):復(fù)制一個字典,會修改所有的字典;
40、 get()函數(shù):查詢字典中的元素。
…………