pandas簡單的使用

生成對(duì)象和獲取對(duì)象的基本信息

pandas中DataFrame生成對(duì)象。

“我”定義的名字

對(duì)于屬性和索引直接為空的對(duì)象,直接傳入矩陣即可。

對(duì)于要指定索引和屬性的數(shù)據(jù)后裸,需要傳入對(duì)應(yīng)參數(shù):

df = pd.DataFrame(data,index=indexs,columns=list("ABCD"))

當(dāng)簡單做測試的時(shí)候,可以用字典進(jìn)行生成對(duì)象:

data = {'a':[1,2,3], 'b':[2,3,4], 'c':[3,4,5]}
df = pd.DataFrame(data)
'''
   a  b  c
0  1  2  3
1  2  3  4
2  3  4  5
'''

補(bǔ):此時(shí)是生成索引是自增的冒滩,當(dāng)前的鍵值對(duì)是從列的角度微驶;如果要指定索引的話,還是得在列的角度开睡,那么對(duì)應(yīng)的值(鍵值對(duì))的列表(list)/中的元素/就要變成字典(dict)了因苹。

df = pd.DataFrame({'a':{'A':1, 'B':2}, 'b':{'A':3, 'B':4}, 'c':{'A':5, 'B':6}})
'''
   a  b  c
A  1  3  5
B  2  4  6
'''

如上较店,當(dāng)值為list 時(shí),生成DataFrame容燕,當(dāng)值為基本數(shù)據(jù)的時(shí)候梁呈,生成Series;鍵在DataFrame時(shí)為列屬性蘸秘,在Series時(shí)為索引官卡。

如果要增加一列的話,將'1' 改為'' 即可醋虏。

df['d'] = '1'
'''
   a  b  c  d
0  1  2  3  1
1  2  3  4  1
2  3  4  5  1
'''

此時(shí)加入的數(shù)據(jù)都是獨(dú)立的寻咒,即改變某行不會(huì)影響其他行。

df.loc[0, 'd'] = '*'
df.loc[0, 'e'] = '*'
'''
   a  b  c  d  e
0  1  2  3  *  *
1  2  3  4  1  1
2  3  4  5  1  1
'''

要想獲取其中的數(shù)據(jù)颈嚼,就用values屬性毛秘,其返回值是<class 'numpy.ndarray'> ,如果不熟悉需要用tolist() 方法轉(zhuǎn)為list阻课。

df_nd = df.values
'''
[[1 2 3 '*' '*']
 [2 3 4 '1' 1]
 [3 4 5 '1' 1]]
'''
df_ls = df_nd.tolist()
'''
[[1, 2, 3, '*', '*'], [2, 3, 4, '1', 1], [3, 4, 5, '1', 1]]
'''

既然說到了values 屬性叫挟,自然而然要延伸出1.獲取屬性,2.獲取索引 3.查看每一列的類型限煞。在此我簡單列出來函數(shù)及展示:

print(df.index)
'''
RangeIndex(start=0, stop=3, step=1)
'''
print(df.columns)
'''
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
'''
print(df.dtypes)
'''
a     int64
b     int64
c     int64
d    object
e    object
dtype: object
'''

注意我沒有特別指定索引抹恳,所以相當(dāng)于一個(gè)自增主鍵;d 列為str署驻, e列因?yàn)樵?code>int中加入了str奋献,所以都是object 類。誠然旺上,正常業(yè)務(wù)中瓶蚂,一個(gè)屬性應(yīng)該是一種類型的,所以用這個(gè)方法還是很有幫助的宣吱。

修改對(duì)象

對(duì)于各種數(shù)據(jù)窃这,常常涉及到:原來的索引是默認(rèn)自增序列,現(xiàn)在想讓某個(gè)屬性作為索引(此時(shí)有兩種凌节,一是直接改原來的屬性钦听;二是將索引改名。差別在于新的索引是否有屬性名)倍奢;

增加屬性直接給新屬性賦空,上面有提到垒棋;

增加索引相當(dāng)于直接增加一行數(shù)據(jù)卒煞。

增加一列值:

df['f'] = [2,2,3]
'''
   a  b  c  d  e  f
A  1  2  3  *  *  2
B  2  3  4  1  1  2
C  3  4  5  1  1  3
'''

只要保證新加入這一列的行數(shù)與現(xiàn)有行數(shù)相同即可。

增加一行:

只需要再寫一個(gè)DataFrame格式的數(shù)據(jù)叼架,然后.append()上去即可畔裕,注意衣撬,ignore_index = True 參數(shù)表示清除目前的索引,改為自增的扮饶,默認(rèn)為False具练;還有新的DF數(shù)據(jù)必須指定index,而且index 必須是集合格式甜无。

new_df = pd.DataFrame({'a':4, 'b':5, 'c':6, 'd':7, 'e':8, 'f':9}, index = ["D"])
df = df.append(new_df, ignore_index = False)
'''
   a  b  c  d  e  f
A  1  2  3  *  *  2
B  2  3  4  1  1  2
C  3  4  5  1  1  3
D  4  5  6  7  8  9
'''

目前我的水平并不需要關(guān)心刪除扛点,只要能跑通即可。

查數(shù)據(jù)主要有兩個(gè)方向岂丘,按行陵究,按列。

按行主要是.loc[].iloc[]奥帘。前者主要是在有索引的時(shí)候用索引名進(jìn)行定位铜邮;后者則是基于位置的。

loc 為例(我常用):

df.loc[index_name, col_name] 可以看出寨蹋,在二維數(shù)據(jù)中松蒜,行和列都指定了,就會(huì)確定出唯一的數(shù)據(jù)已旧;當(dāng)只指定行或列牍鞠,就會(huì)出現(xiàn)對(duì)應(yīng)的行或列。注意index_namecol_name 可以是一個(gè)集合评姨,即列表list难述,這樣可以選出更復(fù)雜的數(shù)據(jù)樣式。

print(df.loc['A', 'a']) # 1
print(df.loc['B', :])
'''
a    2
b    3
c    4
d    1
e    1
f    2
Name: B, dtype: object
'''
print(type(df.loc['B', :])) # <class 'pandas.core.series.Series'>
print(df.loc[:, 'd'])
'''
A    *
B    1
C    1
D    7
Name: d, dtype: object
'''
print(df.loc[['A','C'], ['d','f']])
'''
   d  f
A  *  2
C  1  3
'''

當(dāng)然吐句,Series也可以變成list胁后。簡單的說,一維可以直接取值作為列表元素 Series.tolist()嗦枢,二維的話就要取其中的數(shù)據(jù)攀芯,DataFrame.values.tolist() 。如果在這個(gè)過程中想要自定義的index 那就只有df.columns.tolist()文虏,在進(jìn)行手動(dòng)添加處理了侣诺。

按列的話主要是直接切片操作df[]。按列的話氧秘,只會(huì)有取整列的情況年鸳,所以情況要簡單些。

即在切片中放一個(gè)值一個(gè)列表表示所篩選的列丸相,在有些情況下搔确,使用.col_name 能有很方便的操作。

print(df[['b','d']])
'''
   b  d
A  2  *
B  3  1
C  4  1
D  5  7
'''

將切片和.loc[]結(jié)合起來,會(huì)有很多簡單操作膳算,但是建議不要太多依賴語法糖(假裝)了座硕,不然在記憶的時(shí)候會(huì)變得混亂,如下面的代碼所示涕蜂,在認(rèn)為[] 是對(duì)列進(jìn)行選取后华匾,就盡量不要用它對(duì)行的操作(即傳入一個(gè)布爾列表,它會(huì)對(duì)行進(jìn)行選然丁)蜘拉。

print(df.loc[df.f>2])
'''
   a  b  c  d  e  f
C  3  4  5  1  1  3
D  4  5  6  7  8  9
'''
print(df.f>2)
'''
A    False
B    False
C     True
D     True
Name: f, dtype: bool
'''
print(df[[False, False, True, True]])
'''
   a  b  c  d  e  f
C  3  4  5  1  1  3
D  4  5  6  7  8  9
'''
print(df[[False, False, False, False, False, True]])
'''
ValueError: Item wrong length 6 instead of 4.
'''

改的話無非就是,改索引黍瞧;改屬性诸尽;改數(shù)據(jù)。

對(duì)于改數(shù)據(jù)來說印颤,就是賦值您机,我們能夠找到任意行,任意列年局,所以賦值只需要傳入對(duì)應(yīng)行列的list 即可际看。

df.loc[['A','B'], ['a', 'b']] = [[3, 4], [5, 6]]
'''
   a  b  c  d  e  f
A  3  4  3  *  *  2
B  5  6  4  1  1  2
C  3  4  5  1  1  3
D  4  5  6  7  8  9
'''

對(duì)于改屬性來說,也可以用上述方法暴力矢否,即df.columns = ['1', '2', '3', '4', '5', '6']仲闽,此時(shí)要保證給的列表長度要與原來屬性的長度相同。

采用.rename()方法進(jìn)行更改的話更加靈活僵朗,注意一定要指定傳參的名字赖欣,inplace 如它的含義,是原地修改验庙。

df.rename(columns = {"a":'g', 'c':'h'}, inplace = True)
'''
   g  b  h  d  e  f
A  3  4  3  *  *  2
B  5  6  4  1  1  2
C  3  4  5  1  1  3
D  4  5  6  7  8  9
'''

對(duì)于改索引來說顶吮,也是.rename() 方法,所以這就是一定要指明傳參名字的原因粪薛。

df.rename(index = {"A":'G', 'C':'H'}, inplace = True)
'''
   g  b  h  d  e  f
G  3  4  3  *  *  2
B  5  6  4  1  1  2
H  3  4  5  1  1  3
D  4  5  6  7  8  9
'''

寫在最后

其實(shí)pandas使用時(shí)悴了,記住了以上常見的情況就能解決70%的問題,還有10%的問題是實(shí)際運(yùn)用中违寿,DataFrame對(duì)象在函數(shù)中傳過來傳過去時(shí)湃交,對(duì)于原來的數(shù)據(jù)修改引發(fā)的問題,這相關(guān)的可以考慮參看copy模塊和python參數(shù)傳遞機(jī)制藤巢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搞莺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子菌瘪,更是在濱河造成了極大的恐慌腮敌,老刑警劉巖阱当,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俏扩,死亡現(xiàn)場離奇詭異糜工,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)录淡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門捌木,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嫉戚,你說我怎么就攤上這事刨裆。” “怎么了彬檀?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵帆啃,是天一觀的道長。 經(jīng)常有香客問我窍帝,道長努潘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任坤学,我火速辦了婚禮疯坤,結(jié)果婚禮上漠烧,老公的妹妹穿的比我還像新娘掌唾。我一直安慰自己屈糊,他們只是感情好蚤告,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布已慢。 她就那樣靜靜地躺著远豺,像睡著了一般熊户。 火紅的嫁衣襯著肌膚如雪坑匠。 梳的紋絲不亂的頭發(fā)上布卡,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天雨让,我揣著相機(jī)與錄音,去河邊找鬼羽利。 笑死宫患,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的这弧。 我是一名探鬼主播娃闲,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匾浪!你這毒婦竟也來了皇帮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤蛋辈,失蹤者是張志新(化名)和其女友劉穎属拾,沒想到半個(gè)月后将谊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渐白,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年尊浓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纯衍。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡栋齿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出襟诸,到底是詐尸還是另有隱情瓦堵,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布歌亲,位于F島的核電站菇用,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陷揪。R本人自食惡果不足惜惋鸥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鹅龄。 院中可真熱鬧揩慕,春花似錦、人聲如沸扮休。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玷坠。三九已至蜗搔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間八堡,已是汗流浹背樟凄。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兄渺,地道東北人缝龄。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像挂谍,于是被迫代替她去往敵國和親叔壤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容