Pandas基本操作

數(shù)據(jù)框的創(chuàng)建


pandas.DataFrame(data=None, index=None, columns=None)
參數(shù) 說(shuō)明
data 數(shù)據(jù), 用字典表示, 默認(rèn)為空
index 索引, 方便快速找到某個(gè)數(shù)據(jù), 可以用列表/元祖表示, 默認(rèn)為空
columns 列, 可以用列表/元祖表示, 可以控制列的順序, 更改列名, 默認(rèn)為空
# 生成一個(gè)3行2列的數(shù)據(jù)框,列名分別為name, age; 索引分別為01,02,03
import pandas as pd
dataframe = pd.DataFrame(
    data = {
        'name': ['A', 'B', 'C'],
        'age': [12, 13, 15],
        'other': ['a', 'b', 'c']
    },
    index = ['01', '02', '03'],
    columns = ['name', 'age']
)
In[4]: dataframe
Out[4]: 
   name  age
01    A   12
02    B   13
03    C   15

數(shù)據(jù)框的訪問(wèn)


# 訪問(wèn)單列
In[5]: dataframe['name']
Out[5]: 
01    A
02    B
03    C
Name: name, dtype: object
-------------------------------------------------------------------------------
# 訪問(wèn)多列
In[6]: dataframe[['name', 'age']]
Out[6]: 
   name  age
01    A   12
02    B   13
03    C   15
--------------------------------------------------------------------------------
# 通過(guò)iloc訪問(wèn)單行多列
In[7]: dataframe.iloc[0, 0:2]
Out[7]: 
name     A
age     12
Name: 01, dtype: object
--------------------------------------------------------------------------------
# 通過(guò)loc訪問(wèn)多行單列
In[8]: ]dataframe.loc[['01', '02'], ['name']]
Out[8]: 
   name
01    A
02    B
---------------------------------------------------------------------------------
# 訪問(wèn)多行
In[9]: dataframe.iloc[0:3]
Out[9]: 
   name  age
01    A   12
02    B   13
03    C   15
----------------------------------------------------------------------------------
PS: iloc訪問(wèn)于loc訪問(wèn)的區(qū)別在于是否通過(guò)索引名訪問(wèn). iloc是通過(guò)索引訪問(wèn)的, 訪問(wèn)第一行就是iloc[0], 訪問(wèn)第二行就是iloc[1], 以此類推; loc是通過(guò)索引名訪問(wèn)的, 列如 loc['01'] loc['02']

數(shù)據(jù)框的修改


添加另一個(gè)數(shù)據(jù)框

In[10]: dataframe = dataframe.append(dataframe, ignore_index)
In[11]: dataframe
Out[11]: 
   name  age
01    A   12
02    B   13
03    C   15
01    A   12
02    B   13
03    C   15

In[14]: dataframe = dataframe.append(dataframe, ignore_index=True)
In[15]: dataframe
Out[15]: 
   name  age
0     A   12
1     B   13
2     C   15
3     A   12
4     B   13
5     C   15
6     A   12
7     B   13
8     C   15
9     A   12
10    B   13
11    C   15

數(shù)據(jù)的添加修改刪除

# 列的添加
In[18]: dataframe['NUM'] = [1]*dataframe.shape[0]
In[19]: dataframe
Out[19]: 
   name  age  NUM
0     A   12    1
1     B   13    1
2     C   15    1
3     A   12    1
4     B   13    1
5     C   15    1
6     A   12    1
7     B   13    1
8     C   15    1
9     A   12    1
10    B   13    1
11    C   15    1
--------------------------------------------------------------------------
# 行的添加
In[20]: dataframe.loc['1234'] = ['30'] * dataframe.shape[1]
In[21]; dataframe
Out[21]: 
     name age NUM
0       A  12   1
1       B  13   1
2       C  15   1
3       A  12   1
4       B  13   1
5       C  15   1
6       A  12   1
7       B  13   1
8       C  15   1
9       A  12   1
10      B  13   1
11      C  15   1
1234   30  30  30
---------------------------------------------------------------------------
# 修改某一個(gè)單元格的值
In[22]: dataframe.at['1234', 'age'] = '2222'
In[23]: dataframe
Out[23]: 
     name   age NUM
0       A    12   1
1       B    13   1
2       C    15   1
3       A    12   1
4       B    13   1
5       C    15   1
6       A    12   1
7       B    13   1
8       C    15   1
9       A    12   1
10      B    13   1
11      C    15   1
1234   30  2222  30
PS: 也可以用loc或者iloc
-----------------------------------------------------------------------------
# 列的刪除
##  根據(jù)列名刪除
dataframe = dataframe.drop('name', axis=1, inplace=False)
## 根據(jù)列索引刪除列
dataframe = dataframe.drop(df.columns[[1, 2]], inplace=False, axis=1)
# 行的刪除
dataframe = dataframe.drop(10, axis=0, inplace=False)

數(shù)據(jù)框的讀取


讀取excel

df = pd.read_excel(file_path, sheet_name=None, header=0, index_col=0, converters={'name': str}, na_values='')

讀取csv

df  pd.read_csv(file_path, engine='python', encoding='utf-8')

數(shù)據(jù)框的輸出


輸出excel

df.to_excel(file_path, index=False, header=True, sheet_name='table1')

輸出csv

df.to_csv(file_path)

數(shù)據(jù)框的運(yùn)算

df['name1'] = df['name'] + df['name']
df['name1'] = df['name'] - df['name']
df['name1'] = df['name'] * df['name']
df['name1'] = df['name'] / df['name']

數(shù)據(jù)框的排序


df = df.sort_values(by=['name', 'age'], ascending=[True, False], inplace=False)
參數(shù) 說(shuō)明
by 指定排序的那些列
ascending 是否為升序, 默認(rèn)是True升序, False是降序
inplace 是否直接修改原數(shù)據(jù), 默認(rèn)是False不修改, 返回的是處理后的數(shù)據(jù)

數(shù)據(jù)框的重復(fù)處理


重復(fù)數(shù)據(jù)的查找

dup_df = df[df.duplicated(subset=['name'], keep='first')]
參數(shù) 說(shuō)明
subset 根據(jù)那些列判斷重復(fù), 默認(rèn)所有的列
keep 保留那個(gè)重復(fù)值, 默認(rèn)是first(首個(gè)), last(最后), False都保留

PS: 單寫(xiě)df.duplicated()返回的是是一個(gè)序列數(shù)據(jù)類型是bool(布爾型),要想返回?cái)?shù)據(jù)框,需寫(xiě)df[df.duplicated()]

重復(fù)數(shù)據(jù)的刪除

df = df.drop_duplicates(subset, keep, inplace)
PS: 參數(shù)用法同上

數(shù)據(jù)框的空值處理


數(shù)據(jù)補(bǔ)齊

df = df.fillna(value)
PS: value 是填充的值 

空值的刪除

df = df.dropna(axis=0, how='any')

參數(shù) 說(shuō)明
axis 默認(rèn)是0, 按行刪除, 可以選1, 按列刪除
how 默認(rèn)是any, 一個(gè)為空就刪除, 可選all, 所有為空刪除

空格數(shù)據(jù)處理

df['name'] = df['name'].str.strip()

數(shù)據(jù)框的數(shù)據(jù)轉(zhuǎn)化

dtypes對(duì)應(yīng)的數(shù)據(jù)

pandas數(shù)據(jù)類型 dtype pthon數(shù)據(jù)類型 說(shuō)明
object O str 字符型
int64 int64 int 整數(shù)型
float64 float64 float 浮點(diǎn)型
bool bool bool 布爾型
datetime64 <M8[ns] datetime64[ns] 日期時(shí)間類型
df.dtypes
# 查看數(shù)據(jù)框所有列的數(shù)據(jù)類型

數(shù)值轉(zhuǎn)字符

df['name'] = df['name'].astype(str)

字符轉(zhuǎn)數(shù)值

df['name'] = df['name'].astype(float)

字符轉(zhuǎn)時(shí)間

df['time'] = pd.to_datetime(df['time'], format='%Y/%m/%d %H:%M:%S')

時(shí)間格式化

df['time'] = df['time'].dt.strftime('%Y-%m')

數(shù)據(jù)框的字段拆分

按照位置拆分

df['time'] = df['time'].slice(0, 3)

按照分隔符拆分

df['time'] = df['time'].str.split(pat=',', n=-1, expand=False)
參數(shù) 說(shuō)明
pat 分隔符, 默認(rèn)是空格''
n 分割為n+1列, -1代表返回所有列
expand 是否展開(kāi)為數(shù)據(jù)框, 默認(rèn)是False, 一般設(shè)置為True

時(shí)間屬性的抽取

df.time_year = df.time.dt.year
df.time_month = df.time.dt.month
df.time_week = df.time.dt.weekday
df.time_day = df.time.dt.day
df.time_hour = df.time.dt.hour
df.time_minute = df.time.dt.minute
df.time_sec = df.time.dt.second

數(shù)據(jù)框的記錄抽取


關(guān)鍵詞抽取

fdf = df[df.name.str.contains(pat='str_key', na=False, case=True)]

空值抽取

fdf = df[df.time.isnull()]

數(shù)據(jù)范圍抽取

fdf = df[df.age >= 20]

fdf = df[df.age.between(10, 20)]

時(shí)間范圍抽取

dt1 = datetime(year=2021, month=1, day=1)
df2 = datetime(year=2021, month=2, day=2)
fdf = df[df.time >= dt1 & df.time <= dt2]

組合條件抽取

# 取反
fdf = df[~df.name.str.contains('str', na=False)]

# 與
fdf = df[(df.age > 20) & (df.age < 30) & df.name.str.contains('成', na='False')]

# 或
fdf = df[(df.age == 20) | (df.age == 23)]

數(shù)據(jù)框的數(shù)據(jù)合并


記錄合并

fdf = pd.concat([df1, df2, df3])

字段匹配合并

fdf = pd.merge(df1, df2,  on=[], how='inner')
參數(shù) 說(shuō)明
df1 左邊的數(shù)據(jù)框
df2 右邊的數(shù)據(jù)框
on 連接中使用的列名, left_on和right_on
how 連接的方法有 left, right, inner, outer

數(shù)據(jù)框的數(shù)據(jù)分組

df = pd.DataFrame(np.random.uniform(1, 20, (4, 1)))  # 隨機(jī)產(chǎn)生一個(gè)4*1的數(shù)值在1到20之間的一個(gè)數(shù)據(jù)框
bins = [0, 5, 10, 20]  # 設(shè)置數(shù)值范圍
table = ['0-5', '5-10', '10-20']  # 設(shè)置顯示標(biāo)簽
df['out'] = pd.cut(df[0], bins, labels=table, right=False)  #right=True 區(qū)間為(],right=False區(qū)間為[)
print(df)
df1.png

數(shù)據(jù)框的數(shù)據(jù)分析

  1. 對(duì)比分析
  2. 統(tǒng)計(jì)分析

數(shù)據(jù)框的數(shù)據(jù)圖標(biāo)

數(shù)據(jù)框的樣式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骡和,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子相寇,更是在濱河造成了極大的恐慌慰于,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唤衫,死亡現(xiàn)場(chǎng)離奇詭異婆赠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)战授,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門页藻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桨嫁,“玉大人,你說(shuō)我怎么就攤上這事份帐×О桑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵废境,是天一觀的道長(zhǎng)畜挨。 經(jīng)常有香客問(wèn)我,道長(zhǎng)噩凹,這世上最難降的妖魔是什么巴元? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮驮宴,結(jié)果婚禮上逮刨,老公的妹妹穿的比我還像新娘。我一直安慰自己堵泽,他們只是感情好修己,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著迎罗,像睡著了一般睬愤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纹安,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天尤辱,我揣著相機(jī)與錄音,去河邊找鬼厢岂。 笑死光督,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的咪笑。 我是一名探鬼主播可帽,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窗怒!你這毒婦竟也來(lái)了映跟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扬虚,失蹤者是張志新(化名)和其女友劉穎努隙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辜昵,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荸镊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躬存。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡张惹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出岭洲,到底是詐尸還是另有隱情宛逗,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布盾剩,位于F島的核電站雷激,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏告私。R本人自食惡果不足惜屎暇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驻粟。 院中可真熱鬧根悼,春花似錦、人聲如沸格嗅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)屯掖。三九已至,卻和暖如春襟衰,著一層夾襖步出監(jiān)牢的瞬間贴铜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工瀑晒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绍坝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓苔悦,卻偏偏與公主長(zhǎng)得像轩褐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玖详,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • 讀寫(xiě) 創(chuàng)建DataFramedf = pd.DataFrame(dict把介,index=[ ]) #從字典df = ...
    Koap閱讀 1,305評(píng)論 0 0
  • Dataframe:基本概念及創(chuàng)建 Dataframe 數(shù)據(jù)結(jié)構(gòu) Dataframe是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),“帶有...
    42個(gè)艾爾閱讀 586評(píng)論 0 1
  • Series對(duì)象 Index對(duì)象 s輸出0 1.01 3.02 6.03 NaN4...
    WLWu閱讀 240評(píng)論 0 0
  • pandas是基于NumPy 的一種工具蟋座,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的 #對(duì)數(shù)組處理#兼容各種數(shù)據(jù)庫(kù)#支持...
    42個(gè)艾爾閱讀 773評(píng)論 0 1
  • 今天感恩節(jié)哎拗踢,感謝一直在我身邊的親朋好友。感恩相遇向臀!感恩不離不棄巢墅。 中午開(kāi)了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,559評(píng)論 0 11