日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pandas操作

發(fā)布時(shí)間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pandas操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

?pandas常用操作

1 生成Series、DataFrame對象、轉(zhuǎn)置、查看統(tǒng)計(jì)、類別

2? 利用ndarray、Series創(chuàng)建DataFrame

3? ?取首部head()和尾部tail()

4? ?新增行或列

5? ?修改行名(索引)和列名?

?7? DataFrame、Series和numpy相互轉(zhuǎn)換

8? 排序

? 1、按索引排序后(按軸)

? 2、按某一列值排序(按值排序)

9? 數(shù)據(jù)選擇

? ? 1、選擇某一列

? ? 2、切片(只能按行切)

? ? 3、按行名(索引)或列名選擇

? ? 4、按位置選擇

? ??5、布爾索引

? ? ? ? 1、用列條件選擇數(shù)據(jù)

? ? ? ? 2、用全局條件選擇數(shù)據(jù),

? ? ? ? 3. 用isin()篩選

10? ?賦值?

1、按位置賦值

2、用where條件賦值

11? Series、DataFrame對象追加和拼接

12? 文件輸入/輸出

1. 讀取.csv、.txt、.xlsx文件(需要安裝openpyxl庫)

? ? ?1.1?文件沒有列名:

? ? ?1.2文件有列名:

2. 寫入csv、txt、xlsx文件

3. 讀取和寫入HDF5(需要裝table庫?)


?pandas常用操作

?

1 生成Series、DataFrame對象、轉(zhuǎn)置、查看統(tǒng)計(jì)、類別

s = pd.Series([1, 3, 5, np.nan, 6, 8])

  • index代表行(索引)的名稱,columns代表列的名稱

df = pd.DataFrame(np.random.randn(6, 4), index=None, columns=list('ABCD'))

  • 快速查看統(tǒng)計(jì)

#統(tǒng)計(jì),均值,標(biāo)準(zhǔn)差,最值 df.describe()
  • ?轉(zhuǎn)置
df.T
  • 查看類別
df.dtypes
  • ?顯示索引和列名
df.index df.columns

2? 利用ndarray、Series創(chuàng)建DataFrame

  • df = pd.DataFrame(pd.Series(['A', 'B', 'C']))

  • df = pd.DataFrame({'A': 1,'B': pd.Series([1, 3, 5, np.nan, 6], dtype=np.float32),'C': np.array([2, 3, 4, 5, 6], dtype=np.float32),'D': pd.Categorical(['test', 'train', 'test', 'train', 'test']),'E': 'fool','F': 'nice'})

3? ?取首部head()和尾部tail()

?

df.head() #輸出數(shù)據(jù)的前五行 df.head(3) #輸出數(shù)據(jù)的前三行 df.tail(3) #輸出數(shù)據(jù)的后三行 df.tail() #輸出數(shù)據(jù)的后五行

4? ?新增行或列

#添加一行或多行數(shù)據(jù) df2=df.append(df1_new, ignore_index=True) #ignore_index=True,表示不按原來的索引,從0開始自動(dòng)遞#增#添加一列 df['F'] = np.array([1,2, 3]) #在df末尾新增一列,列名為F#添加多列,可以用concat()增加,但是只能加在末尾,而reindex可以添加在任何位置#重新索引,加入原數(shù)據(jù)只要a,b兩列,下面代碼是加入c, d兩列, 這兩列的值都是10。輸出順序可以隨意更改, df = df.reindex(columns=['a', 'c', 'b', 'd'], fill_value = 10)

5? ?修改行名(索引)和列名?

? ? ?行名和列名如果都沒賦值,默認(rèn)都是0開始計(jì)數(shù)

  • 注意:創(chuàng)建一個(gè)DataFrame,不指定行名和列名,默認(rèn)都是0計(jì)數(shù)

df = pd.DataFrame(np.random.randint(12, size=(3, 4)))

  • 修改方式如下:
#方式一:全部修改 #修改行名 df.index = ['A', 'B', 'C'] #修改列名 df.columns = ['a', 'b', 'c', 'd']#方式二:選擇性修改某一行名或列名 #修改部分行名,0,1行名被修改成x, y df_new =df.rename(index={0: "x", 1: "y", 2: "z"})#replace參數(shù)默認(rèn)False,返回一個(gè)新的DataFrame #修改部分列名, 修改a、b兩列為c、d df.rename(columns={"a":"c", "b":"d"}, replace=True)#replace是True,則在原表上修改

??????6、刪除某一列或某一列

#下面兩個(gè)方式等價(jià) df.drop(columns=['B', 'C']) df.drop(['B', 'C'], axis=1)#刪除某行,下面兩個(gè)等價(jià) df.drop([0, 1]) df.drop(index=[0, 1])

?7? DataFrame、Series和numpy相互轉(zhuǎn)換

#pandas轉(zhuǎn)numpy, 下面四種轉(zhuǎn)換等價(jià),輸出不帶行名和列名。這里的df可以是Series或DataFrame df.to_numpy(np.int64) #可以修改數(shù)據(jù)類型 df.values np.array(df)#numpy數(shù)組轉(zhuǎn)DataFrame df = pd.DataFrame(data)#numpy轉(zhuǎn)Series df = pd.Series(np.array([1,2,3])) #必須是一維的ndarray,不能是多維

8? 排序

  • ? ?原數(shù)據(jù), 下面幾個(gè)例子也是這個(gè)數(shù)據(jù)

? 1、按索引排序后(按軸)

df.sort_index(axis=0, ascending=False) #按行名的大小排序

? 2、按某一列值排序(按值排序)

df.sort_values(by='c') #按列名為‘c’的值排序

9? 數(shù)據(jù)選擇

? ? 1、選擇某一列

df['a'] #輸出行名為a的全部列值

? ? 2、切片(只能按行切)

? ? ? 下面兩個(gè)效果一樣

df[0:2] #輸出前兩行 df['A': 'B'] #按行名輸出前兩行

? ? 3、按行名(索引)或列名選擇

df.loc['A'] #輸出一行df.loc['A', 'a'] #輸出行名為A的a列,標(biāo)量 df.at['A', 'a'] #跟上一個(gè)等價(jià)df.loc['A', ['a', 'b']] #只輸出行名為A, 的a, b兩列的值 df.loc[:, ['a', 'b', 'c']] #輸出全部行的a, b, c三列的值 df.loc['A': 'B', ['a', 'd']] #輸出A到B行的a和d列

? ?4、按位置選擇

df.iloc[2] #輸出第三行,位置從0行算起 df.iloc[:,2] #輸出第三列, 位置從0列算起 df.iloc[0:2, 1:3] #類似numpy切片,輸出(0、1)行(1、2)列 df.iloc[1, 1] #輸出第2行第2列的值df.iat[1,1] #快速訪問標(biāo)量,輸出第2行第2列的值,與上一個(gè)等價(jià)

? ?5、布爾索引

? ? ? ? 1、用列條件選擇數(shù)據(jù)

df[df['a'] >= 10] #輸出滿足a列值》=10的行數(shù)據(jù)

?

? ? ? ? 2、用全局條件選擇數(shù)據(jù),

? ? ? ? ? ? ? ? ? 不滿足的變?yōu)閚an

df[df>2] #不大于2的值被變?yōu)閚an

? ? ? ?3. 用isin()篩選

df[df['d'].isin([4, 11])] #輸出d列的值在[4, 11]內(nèi)的行

10? ?賦值?

1、按位置賦值

df.iloc[1, 1] =1000

?

2、用where條件賦值

df[df>0] = -df #df中大于0的值全部變?yōu)樨?fù)值

11? Series、DataFrame對象追加和拼接

#追加行數(shù)據(jù),可以是Series或DataFrame df.append(pd.Series(np.array([1,2,3,4])), ignore_index=True) #拓展一行Series df.append(df1, ignore_index=True) #拓展一個(gè)df1,直接將接在df后面,算做df的行 #拼接 pd.concat([df1,df2, df3], axis=1)#axis默認(rèn)是0, 在0軸上合并。

12? 文件輸入/輸出

1. 讀取.csv、.txt、.xlsx文件(需要安裝openpyxl庫)

pd.read_csv(filepath_or_buffer, sep=',',header=0, names=None,dtype=None, nrows=None,encoding=None等等)

filepath_or_buffer:文件所在處的路徑

sep:指定分隔符,默認(rèn)為逗號(hào)','

header:?指定第幾行作為列名,如果沒有指定列名,默認(rèn)header=0; 如果數(shù)據(jù)本身不存在列名,就用header=None

names:指定列的名稱,用列表表示。一般我們沒有表頭,即header=None時(shí),這個(gè)用來添加列名就很有用啦!

dtype:?? 指定數(shù)據(jù)類型? 例如{‘a(chǎn)’: np.float64, ‘b’: np.int32}

nrows?: int, 需要讀取的行數(shù)(從文件頭開始算起)

encoding: 亂碼的時(shí)候用這個(gè)

例子如下:

''' 讀取test.csv, 以逗號(hào)識(shí)別,不存在列名,加列名0到64,將列名2的數(shù)據(jù)轉(zhuǎn)成float32, 輸出五行,編碼為utf-8 ''' pd.read_csv('./data/test.csv', sep=',', header=None, names=range(65),dtype={2: np.float32}, nrows=5,encoding='utf-8')

? ? 1.1?文件沒有列名:

? ? ? ? ?即第一就是數(shù)據(jù),讀取方式如下,這樣讀取后的列名就是系統(tǒng)默認(rèn)的0,1,2...?

#自動(dòng)加上列名,0開始計(jì)數(shù) df = pd.read_csv('test.csv', header=None)#添加列名 df.columns = ['A', 'B','C'] #實(shí)際就是列名修改,但是需要提供全部列名#讀取時(shí)就添加列名 df = pd.read_csv('./data/test.csv', header=None, names=['A', 'B','C'])

? ?1.2文件有列名:

import pandas as pd#使用數(shù)據(jù)的列名 df = pd.read_csv('./data/test.csv') # 等價(jià) df = pd.read_csv('./data/test.csv', header=0)#讀取時(shí),修改成自己的列名 df_example = pd.read_csv('Pandas_example_read.csv', names=['A', 'B','C']) pd.read_csv('./data/foo.csv') pd.read_csv('./data/foo.txt') pd.read_csv('./data/foo.xlsx')

2. 寫入csv、txt、xlsx文件

格式:

pd.to_csv(path_or_buf=None,? sep=',' , na_rep='', float_format=None, columns=None, header=True, index=True,?等等.....)

參數(shù)非常多,常用的幾個(gè)參數(shù)如下:

filepath_or_buffer:? 即文件保存路徑

sep:? 指定分隔符,默認(rèn)為逗號(hào)','? ?例:sep = '?'

na_rep:字符串,將NaN轉(zhuǎn)換為特定值? 例:na_rep =? 'abc'

float_format: 數(shù)據(jù)格式,格式是None, 例:float_format='%.2f'

columns:保存哪些列,默認(rèn)是所有類都保存, 例:columns = ['a', 'b'],只保存a, b列

header='True':? 是否寫入列名,默認(rèn)是True

index:是否寫入行名(索引),默認(rèn)是True

例子如下:

df.to_csv('./fool.csv') df.to_excel('./fool.xlsx')''' pandas寫入test.csv中,用問號(hào)進(jìn)行分割,nan值被替換成123, 寫入格式是小數(shù)點(diǎn)后兩位數(shù),只寫入c, a, b三列, 不寫入列名,不寫入行名(索引) ''' df.to_csv(path_or_buf='./data/test.csv', sep='?', na_rep='123', float_format='%.2f', columns=['c', 'a', 'b'], header=True, index=False)

3. 讀取和寫入HDF5(需要裝table庫?)

pip install --user tables #如果是pip命令用這個(gè) conda install pytables #如果是conda命令用這個(gè)#讀取hdf5 df = pd.read_hdf('fool.h5')#寫入hdf5 df.to_hdf('fool', 'df')

? ? ? ?

下篇博客:機(jī)器學(xué)習(xí)數(shù)據(jù)處理

?

總結(jié)

以上是生活随笔為你收集整理的pandas操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。