導航:首頁 > 編程語言 > python修改列名

python修改列名

發布時間:2022-12-07 09:47:54

A. 在python中怎麼在一個原有的DataFrame中加一新的列名

dataframe是神馬?我只會json格式的數據轉dict類型123import jsonj = json.loads(\\'{"name":"123","Age":22}\\') print(j) ========你是指pandas里的dataframe嗎?傳入dict參數實例化一下就行了

B. Python 數據處理(三十五)—— 文本數據處理

在 pandas 中,存儲文本主要有兩種方式

但一般建議使用 StringDtype 類型存儲文本數據。都是由於各種原因,現在字元串數據的默認存儲類型還是 object 。

要存儲為 string 類型,需要顯式的設置 dtype 參數

或者在創建 Series 或 DataFrame 之後,使用 astype 轉換類型

也可以使用 StringDtype/"string" 轉換其他非字元串類型的數據

轉換現有數據的類型

StringDtype 類型對象與 object 類型之間存在一些差異

兩個結果的輸出都是 Int64 類型。將其與 object 類型比較

當存在 NA 值時,輸出為 float64 。類似地,對於返回布爾值的方法

Series 和 Index 有一套字元串處理方法,可以方便地對數組的每個元素進行操作,最重要的是,這些方法會自動忽略缺失值。

這些方法可以通過 str 屬性訪問,通常具有與內置字元串方法相匹配的名稱

Index 上的字元串方法對於清理或轉換 DataFrame 的列特別有用。

例如,您可能有帶有前導或後置空格的列

因為 df.columns 是一個 Index 對象,所以我們可以使用 .str 訪問器

我們可以根據需要對列名進行處理,然後重新設置列名。

例如,我們刪除列名的前後空格,並將其改為小寫字母,同時用 _ 替換剩餘的空格

split 方法會返回一個值為 list 的 Series

可以使用 get 或 [] 訪問拆分後的列表中的元素

更簡單的方法是設置 expand 參數,返回一個 DataFrame

當原來的 Series 包含 StringDtype 類型的數據時,輸出列也將全部為 StringDtype

當然,也可以設置切割次數

它還有個對應的 rsplit 方法,從右邊起始對字元串進行拆分

replace 參數支持使用正則表達式,前兩個參數是 pat (匹配模式) 和 repl (替換字元串)

如果只是想要替換字元串字面值,可以將 regex 參數設置為 False ,而不需要對每個特殊字元進行轉義。此時 pat 和 repl 參數必須是字元串

此外, replace 方法還接受一個可調用的替換函數,會使用 re.sub() 方法在每個匹配的模式上調用該函數

該函數需要傳入一個正則對象作為位置參數,並返回一個字元串。例如

replace 方法的 pat 參數還接受 re.compile() 編譯的正則表達式對象。所有的 flags 需要在編譯正則對象時設置

如果在 replace 中設置 flags 參數,則會拋出異常

有幾種方法可以將一個 Series 或 Index 與自己或其他的 Series 或 Index 相連接,所有這些方法都是基於 cat() 方法

可以連接一個 Series 或 Index 的內容

如果未指定 sep 參數,則默認為空字元串

默認會跳過缺失值,也可以使用 na_rep 指定缺失值的表示方式

cat() 的第一個參數 others 可以是類似列表的對象,但是其長度需要和調用對象一致

只要兩個對象中存在缺失值,對應的結果中也是缺失值,除非指定了 na_rep

others 參數也可以是二維的,但是得保證其行數必須與調用的對象一致

對於 Series 或 DataFrame 的連接,可以通過設置 join 參數指定對齊方式

通常 join 可選范圍為: 'left' , 'outer' , 'inner' , 'right' 。此時,不再要求兩個對象長度一致

當 others 參數是 DataFrame 時,也可以使用

可以將一些類似數組的對象(如 Series , Index 等)放在一個類似列表的容器中,然後傳遞給 cat

對於沒有索引的對象,其長度必須與調用 cat 的對象相同。但是 Series 和 Index 可以是任意的,除非設置了 json=None 。

如果在 others 參數上包含不同索引的對象,且設置了 join='right' ,則最後的結果將會是這些索引的並集

C. python對dataframe列里的元素進行修改

直接在參數一欄設置一下即可:
df=pd.read_csv('text.csv', dtype={'編號':str}
 
這樣,把你要轉換的列的名字設定好, 「編號」列中的數據讀取為str
 
這樣,讀取到的數據就是按照我們的要求的了。

D. Python基礎命令都有什麼

(1)打開csv文件
import pandas as pd
df=pd.read_csv(r』data/data.csv』)
(2)dataframe index 重新排序
data=df.sort_index(axis=0,ascending=False)
(3)dataframe 按照某一列進行升序或者降序排列
data=df.sort([『date』],ascending=True升序,False降序)
(4)dataframe 的index重新從0開始
data=data.reset_index(drop=True)
(5)畫橫坐標是日期的圖
import matplotlib.pyplot as plt
x=data[『date』]#日期是字元串形式
y=data[『close price』]
plt.plot_date(x,y)
(6)求標准差
import numpy as np
np.std
(7)下取整
import math
math.floor
上取整:math.ceil
(8)希爾伯特變換
from scipy import fftpack
hx= fftpack.hilbert(price)
(9)值排序
data.order()
(10)差分
data.diff(1)#一階差分
dataframe 刪除元素
data.drop(元素位置)
(11)嵌套的array處理方法
import itertools
a = [[1,2,3],[4,5,6], [7], [8,9]]
out = list(itertools.chain.from_iterable(a))
(12)dataframe修改列名
data.columns=[『num』,』price』]
(13)excel表導入以後有空行解決辦法
import numpy as np
data= data.drop(data.loc[np.isnan(data.name.values)].index)
(15)diff用法
一.是dataframe或者series格式,直接就用data.diff()
二.是list格式,先轉換成轉換成list格式data=data.tolist() 然後dif=np.diff(data)
(16)dataframe中的日期type不是date格式,不能直接相加減,所以先轉換成list格式
t=data.time.tolist()
date_time = datetime.datetime.strptime(str(t),』%Y-%m-%d %H:%M:%S』)
date_time=datetime.date(date_time.year,date_time.month,date_time.day)
past= date_time - datetime.timedelta(days=n*365)
(17)符號化
np.sign
(18)字典的使用
label={『11』:』TP』,』1-1』:』FN』,』-11』:』FP』,』-1-1』:』TN』}
for i in range(len(data1)):
state=str(int(data1[i]))+str(int(data2[i]))
result.append(label[state])
(19)用plt畫圖的時候中文不顯示的解決辦法
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r」c:windowsontssimsun.ttc」, size=15)
plt.title(u』中文』, fontproperties=font_set)
(20)獲取當前程序運行的時間
from time import time
time1=time()
time2=time()
print(time2-time1)
以上是我找到的資料,對於我這個學習Python到半吊子的人來說也是要收藏起來的。

E. python 怎麼添加列名(表頭)

添加列名:
pd.read_csv(file, header=None, names = ['a','b','c'] )1

names為指定的名字
數據tab分隔的時候去讀方式
sep指定
df = pd.read_csv('../input/data_train.csv',sep = '\t',encoding='GBK')

F. 09.pandas修改列名、索引名字

有時候我們需要修改DataFrame的個別列名或者索引,避免重復、方便使用。

這時就需要使用到rename()函數,rename()函數使用時比較簡單。

源數據
現在我們想要把'表1Lat'和'表1Lon'改為維度和經度:

其中columns代表要對列名進行修改,在Python的pandas庫裡面,跟列名有關的一般都是用columns,而不是用names。在columns後面是一個字典形式,鍵是原列名,值是新列名。修改的時候只會改選擇到的列。注意修改只會要寫入源數據時需要賦值或者用inplace = True。

rename()函數適合於修改個別的索引或者列名,如果需要大部分的修改或者全部修改的話就使用set_index()函數比較方便。

多層索引或者列名怎麼修改?

G. Python其實很簡單 第二十一章 DataFrame數據處理

將Excel中的的數據讀入數據框架DataFrame後,可以非常方便的進行各種數據處理。

21.1 列間求和

求總分(總分=語文+數學+英語)

對於上一章所提到的學生成績表,僅用一個語句即可完成總分計算,並填充。

df['總分']=df['語文']+df['數學']+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['數學']+df['英語']

print(df.head()) #df.head()的作用是僅顯示5行記錄。

運行結果如下:

序號 學號 姓名 年級 班級 語文 數學 英語 總分 名次

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替換

既可以將對滿足條件的行和列的數據替換,也可以對整個集合的數據按照條件進行替換。

df['總分'].replace(310,'x',inplace=True)

將總分列的數值「310」替換為「x」。inplace=True表示改變原數據。

df.replace(76,0,inplace=True)

將整個DataFrame中的數值「76」替換為「0」。

df.replace([98,76,99],0,inplace=True)

將整個DataFrame中的數值「98,76,99」一次替換為「0」。

21.2排序

既可以將某一列作為關鍵欄位排序,也可以將幾個列分別作為主、次關鍵欄位進行排序。排序既可以按升序排序,也可以按降序排序。

函數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 欄位截取

函數slice()可以從某列中截取字元串。格式如下:

slice(start,stop)

其中,start表示開始位置;stop表示結束位置

例:

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(񟚓',na=False)]

此處的na=False,含義是如遇到NaN這樣的數據,直接做不匹配處理。

21.5修改記錄

1、整列替換

我們在前面已經給整列填充過數據,填充時原來的數據就被覆蓋了。

即如下語句:

df['總分']=df['語文']+df['數學']+df['英語']

2、個別修改

如將值『99』替換為值『100』,可用如下語句:

df.replace(ྟ',颼')

將指定列的值替,如將語文列和英語列的值『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)])

運行結果為:

序號 學號 姓名 年級 班級 語文 數學 英語 總分 名次

28 29 090802 丁能通 09 NaN 119 120 99 338 NaN

29 30 090203 沈丹妮 09 NaN 109 108 99 316 NaN

Empty DataFrame

Columns: [序號, 學號, 姓名, 年級, 班級, 語文, 數學, 英語, 總分, 名次]

Index: []

可以看出,第一個print()語句輸出的結果中滿足條件「語文或英語為99分」的有兩條記錄,替換語句執行以後,df中再沒有滿足條件「語文或英語為99分」的記錄了。

21.6記錄合並

函數concat()的格式如下:

concat([dataFrame1,dataFrame2,......],ignore_index=True)

其中,dataFrame1等表示要合並的DataFrame數據集合;ignore_index=True表示合並之後的重新建立索引。其返回值也是DataFrame類型。

concat()函數和append()函數的功能非常相似。

例:

import pandas #導入pandas模塊

from pandas import read_excel #導入read_execel

file='d:/student.xlsx' #變數file表示文件路徑,注意'/'的用法 數據見第18章表18-1

df=read_excel(file,sheet_name=0,converters={'學號':str})

# 將Excel文件導入到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

運行結果如下:

序號 學號 姓名 年級 班級 語文 數學 英語 總分 名次

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

序號 學號 姓名 年級 班級 語文 數學 英語 總分 名次

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中,可以看出,索引仍然保持原來的狀態。

21.7統計次數

可以用如下方法統計出某個值在某行或者某個范圍出現的次數。

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())

輸出結果如下:

序號 學號 姓名 年級 班級 語文 數學 英語 總分 名次

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()函數可以統計出列中各值出現的次數。

value_counts()函數的參數還有 :

ascending,當ascending=True時升序排列,當ascending=False時升序排列(此時該參數可省缺);

normalize,當normalize=True時,顯示的不再是各值出現的次數,而是佔比。

將上例中的語句print(df['語文'].value_counts())改為:

print(df['語文'].value_counts(ascending=True,normalize=True))

則輸出結果變成了:

91 0.2

84 0.2

89 0.6

Name: 語文, dtype: float64

21.8按值查找

print(df['語文'].isin([84,91]))

它的作用是查找『語文』列中值和isin所指的列表中元素一致的記錄,如果找到結果為True,否則為False。

輸出結果:

0 True

1 False

2 False

3 False

4 True

Name: 語文, dtype: bool

21.9數據分區

根據某個分區標准,將數據按照所屬區域進行劃分,並用相應的標簽表示,可以用cut()方法來實現。

語法格式如下:

cut(series, bins, right=True, labels=NULL)

其中:

series表示需要分組的數據;

bins表示分組的依據,是一個列表,其元素為劃分分區的邊界值,如[0,72,96,120],就是劃分3個分區,即0~72、72~96、96~120,默認的是「左包右不包」;

right表示分組時右邊是否閉合;

labels表示分組的自定義標簽,也可以不重新定義。

下面對上述學生成績表中的語文成績進行分組,並增加一個新的列「語文等級」。

import pandas as pd

from pandas import read_excel #導入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.數學+df.英語

bins=[0,72,96,max(df.語文)+1] #

lab=['不及格','及格','優秀']

grade=pd.cut(df.語文,bins,right=False,labels=lab)

df['語文等級']=grade

print(df.head())

print("語文成績分等級統計結果:")

print(df['語文等級'].value_counts())


運行結果如下:

序號 學號 姓名 年級 班級 語文 數學 英語 總分 語文等級

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 及格

語文成績分等級統計結果:

及格 17

優秀 10

不及格 4

Name: 語文等級, dtype: int64

H. python pandas怎麼設置列名

首先是引入pandas和numpy,這是經常配合使用的兩個包,pandas依賴於numpy,引入以後我們可以直接使用np/pd來表示這個兩個模塊
先創建一個時間索引,所謂的索引(index)就是每一行數據的id,可以標識每一行的唯一值
為了快速入門,我們看一下如何創建一個6X4的數據:r

I. python對excel操作

Python對於Excel的操作是多種多樣的,掌握了相關用法就可以隨心所欲的操作數據了!

操作xls文件

xlrd(讀操作):

import xlrd

1、引入xlrd模塊

workbook=xlrd.open_workbook("36.xls")

2、打開[36.xls]文件,獲取excel文件的workbook(工作簿)對象

names=workbook.sheet_names()

3、獲取所有sheet的名字

worksheet=workbook.sheet_by_index(0)

4、通過sheet索引獲得sheet對象

worksheet為excel表第一個sheet表的實例化對象

worksheet=workbook.sheet_by_name("各省市")

5、通過sheet名獲得sheet對象

worksheet為excel表sheet名為【各省市】的實例化對象

nrows=worksheet.nrows

6、獲取該表的總行數

ncols=worksheet.ncols

7、獲取該表的總列數

row_data=worksheet.row_values(n)

8、獲取該表第n行的內容

col_data=worksheet.col_values(n)

9、獲取該表第n列的內容

cell_value=worksheet.cell_value(i,j)

10、獲取該表第i行第j列的單元格內容

xlwt(寫操作):

import xlwt

1、引入xlwt模塊

book=xlwt.Workbook(encoding="utf-8")

2、創建一個Workbook對象,相當於創建了一個Excel文件

sheet = book.add_sheet('test')

3、創建一個sheet對象,一個sheet對象對應Excel文件中的一張表格。

sheet.write(i, j, '各省市')

4、向sheet表的第i行第j列,寫入'各省市'

book.save('Data\\36.xls')

5、保存為Data目錄下【36.xls】文件

操作xlsx文件

openpyxl(讀操作):

import openpyxl

1、引入openpyxl模塊

workbook=openpyxl.load_workbook("36.xlsx")

2、打開[36.xlsx]文件,獲取excel文件的workbook(工作簿)對象

names=workbook.sheetnames

worksheet=workbook.worksheets[0]

worksheet=workbook["各省市"]

ws = workbook.active

6、獲取當前活躍的worksheet,默認就是第一個worksheet

nrows=worksheet.max_row

7、獲取該表的總行數

ncols=worksheet.max_column

8、獲取該表的總列數

content_A1= worksheet['A1'].value

9、獲取該表A1單元格的內容

content_A1=worksheet.cell(row=1,column=1).value

10、獲取該表第1列第1列的內容

openpyxl(寫操作):

workbook=openpyxl.Workbook()worksheet = workbook.active

3、獲取當前活躍的worksheet,默認就是第一個worksheet

worksheet.title="test"

4、worksheet的名稱設置為"test"

worksheet = workbook.create_sheet()

5、創建一個新的sheet表,默認插在工作簿末尾

worksheet.cell(i,j,'空')

6、第i行第j列的值改成'空'

worksheet["B2"]="空"

7、將B2的值改成'空'

worksheet.insert_cols(1)

8、在第一列之前插入一列

worksheet.append(["新增","台灣省"])

9、添加行

workbook.save("Data\\36.xlsx")

10、保存為Data目錄下【36.xlsx】文件

pandas處理excel文件

pandas操作:

import pandas as pd

1、引入pandas模塊

data = pd.read_excel('36.xls')

2、讀取[36.xls]或者[36.xlsx]文件

data = pd.read_csv('36.csv')

3、讀取[36.csv]文件

data=data.dropna(subset=['店鋪'])

4、過濾掉data店鋪列有缺失的數據

data.sort_values("客戶網名", inplace=True)

5、將data數據按照客戶網名列進行從小到大排序

data = pd.read_csv(36.csv, skiprows = [0,1,2],sep = None, skipfooter = 4)

6、讀取[36.csv]文件,前三行和後四行的數據略過

data = data.fillna('空')

7、將data中的空白處填充成'空'

data.drop_plicates('訂單','first',inplace=True)

8、data中的數據,按照【訂單】列做去重處理,保留第一條數據

data=pd.DataFrame(data,columns=['訂單','倉庫'])

9、只保留data中【訂單】【倉庫】列的數據

data = data[(data[u'展現量'] > 0)]

10、只保留【展現量】列中大於0的數據

data= data[data["訂單"].str.contains('000')]

11、只保留【訂單】列中包含'000'的數據

data= data[data["倉庫"]=='正品倉']

12、只保留【倉庫】列是'正品倉'的數據

xs= data[data["店鋪"]=='南極人']['銷售額']

13、獲取店鋪是南極人的銷售額數據

data['訂單'] = data['訂單'].str[3:7]

14、【訂單】列的值只保留4-8個位元組的值

data["郵資"] = np.where((data['店鋪'].str.contains('T|t')) & -(data['倉庫'] == '代發倉'), 8, data['郵資'])

15、滿足店鋪列包含 T 或 t 並且倉庫不等於'代發倉'的話,將郵資的值改成8,否則值不變

data = np.array(data).tolist()

16、將data從DataFrame轉換成列表

data=pd.DataFrame(data)

17、將列表轉換成DataFrame格式

zhan = data[u'展現'].sum().round(2)

18、將data中所有展現列數據求和,並取兩位小數

sum=data.groupby(['店鋪'])['刷單'].sum()

19、將data中按照店鋪對刷單進行求和

counts=data['店鋪'].value_counts()

20、將data按照店鋪進行計算

avg=data.groupby(['店鋪'])['刷單'].mean()

21、將data按照店鋪對刷單進行求平均數

count = pd.concat([counts,sum], axis=1, ignore_index=True, sort=True)

22、將counts和sum兩個DataFrame進行了組合

count=count.rename(index=str, columns={0: "訂單", 1: "成本"})

23、將新生成的DataFrame列名進行修改

data = pd.merge(sum, counts, how='left', left_on='店鋪', right_on='店鋪')

24、將列表轉換成DataFrame格式

from openpyxl import Workbook 

wb=Workbook()  

ws1=wb.active 

data.to_excel('36.xlsx') 

wb.close()

25、data完整的寫入到關閉過程,執行此操作的時候【36.xlsx】不能是打開狀態

excel格式操作

樣式處理:

1、打開【36.xlsx】

sheet=workbook.worksheets[0]

2、將第一個sheet對象賦值給sheet

sheet.column_dimensions['A'].width = 20.0

3、將A列的寬度設置為20

sheet.row_dismensions[1].height = 20.0

4、將第一行的行高設置為20

sheet.merge_cells('A1:A2')

5、將sheet表A1和A2單元格合並

sheet.unmerge_cells('A1:A2')

6、將sheet表A1和A2單元格取消合並

sheet.insert_rows(2,2)

7、將sheet表從第2行插入2行

sheet.insert_cols(3,2)

8、將sheet表從第3列插入2列

sheet.delete_rows(2)

9、刪除第2行

sheet.delete_cols(3, 2)

10、將sheet表從第3列開始刪除2列

from openpyxl.styles import Font, Border, PatternFill, colors, Alignment

11、分別引入字體、邊框、圖案填充、顏色、對齊方式

sheet.cell(i,j).font = Font(name='Times New Roman', size=14, bold=True, color=colors.WHITE)

12、設置sheet表第 i 行第 j 列的字體

sheet.cell(i,j).alignment = Alignment(horizontal='center', vertical='center')

13、設置sheet表第 i 行第 j 列的字體對齊方式

left, right, top, bottom = [Side(style='thin', color='000000')] * 4sheet.cell(i,j).border = Border(left=left, right=right, top=top, bottom=bottom)

14、引入邊框樣式並調用

fill = PatternFill("solid", fgColor="1874CD")sheet.cell(1,j).fill = fill

15、引入填充樣式,並調用

import xlrd

from openpyxl import Workbook

from openpyxl import load_workbook

workbook=load_workbook(filename='C:/Users/EDZ/Desktop/工作/2021.08.03/大兄弟.xlsx')

sheet=workbook.active

sheet.insert_cols(idx=1)

sheet.merge_cells(A1:A3)

sheet['A1']=['上海','山東','浙江']

J. Python其實很簡單 第十九章 Pandas之Series與DataFrame

19.1安裝Anaconda

Anaconda是Python的一個開源發行版本,它預裝了豐富的第三方庫,而且主要面向科學計算和數據分析,使用起來要比原版的Python更省時省力。

Anaconda官方下載網址為:https://www.continuum.io/downloads。下載和安裝的方法很簡單,若有問題可以在網上搜索相關內容學習解決。

安裝Anaconda之後,就會發現在Anaconda目錄下同時安裝了Jupyter Notebook、Spyder等工具,我們接下來主要使用Spyder進行開發。關於Spyder的使用方法非常簡單,大家也可以去網上搜索學習。

雖然Anaconda已經預裝了很多常用的包,但有時我們也需要自己安裝一些包。可以在開始菜單中選擇「Anaconda Anaconda Prompt」命令,在命令行輸入conda install ( 代表包名)即可安裝,也可以輸入pip install 。

19.2數據分析包Pandas

Pandas是Python的一個數據分析包,Anaconda安裝時已經附帶安裝了Pandas包。

Pandas數據結構有三種:Series(一維數組)、DataFrame(二維數組)和Panel(三維數組),其中最常用的是前兩種數據結構。

19.2.1 Series

Series(序列)用於存儲一行或一列數據,以及與之相關的索引的集合。

語法格式如下:

Series([數據1,數據2,......], index=[索引1,索引2,......])

例:

from pandas import Series

s=Series(['張三','李四','王五'],index=[1,2,3])

print(s)

輸出結果如下:

1 張三

2 李四

3 王五

dtype: object

上面建立序列時指定了索引,若不指定,則默認的索引值從0開始。如下:

s=Series(['張三','李四','王五'])

輸出結果為:

0 張三

1 李四

2 王五

dtype: object

索引值也可以為字元串。如下:

from pandas import Series

s=Series(['張三','李四','王五'],index=['A','B','C'])

print(s)

輸出結果為:

A 張三

B 李四

C 王五

dtype: object

1、訪問序列

(1)可以通過索引訪問序列,如:

from pandas import Series

s=Series(['張三','李四','王五'])

print(s)

print(s[0])

print(s[1:])

運行結果如下:

0 張三

1 李四

2 王五

dtype: object #print(s)輸出

張三 #print(s[0])輸出

1 李四

2 王五

dtype: object #print(s[1:])輸出

(2)通過值獲取索引值

from pandas import Series

s=Series(['張三','李四','王五'],index=['A','B','C'])

print(s.index[s.values=='李四'])

運行結果:

Index(['B'], dtype='object')

(3)判斷值是否存在

from pandas import Series

s=Series(['張三','李四','王五'],index=['A','B','C'])

f='李四' in s.values

print(f)

運行結果:

True

(4)定位獲取

from pandas import Series

s=Series(['張三','李四','王五','孫六'],index=['A','B','C','D'])

print(s[[0,2,1]])

運行結果:

A 張三

C 王五

B 李四

dtype: object

2、修改序列

(1)追加序列,如:

from pandas import Series

s=Series(['張三','李四','王五'],index=['A','B','C'])

s1=Series(['孫六'],index=['D'])

s=s.append(s1)

print(s)

運行結果:

A 張三

B 李四

C 王五

D 孫六

dtype: object

(2)修改序列的值

from pandas import Series

s=Series(['張三','李四','王五','孫六'],index=['A','B','C','D'])

s[1]='李飛'

print(s)

運行結果:

A 張三

B 李飛

C 王五

D 孫六

dtype: object

不知道索引,僅知道要修改的值,也可通過值查找到索引後,再修改序列的值。如:

s[s.index[s.values=='李四']]='李飛'

這樣也可以將「李四」修改為「李飛。

(3)修改索引

from pandas import Series

s=Series(['張三','李四','王五','孫六'],index=['A','B','C','D'])

s.index=[0,1,2,3]

print(s)

運行結果:

0 張三

1 李四

2 王五

3 孫六

dtype: object

(4)刪除元素

from pandas import Series

s=Series(['張三','李四','王五','孫六'],index=['A','B','C','D'])

s=s.drop('A')

print(s)

運行結果:

B 李四

C 王五

D 孫六

dtype: object

(5)重新排序

可以按照索引排序,使用sort_index(ascending=True)方法對index進行排序操作。

from pandas import Series

s=Series(['張三','李四','王五','孫六'],index=['A','B','C','D'])

s=s.sort_index(ascending=False) # ascending=False表示按降序排列

print(s)

運行結果:

D 孫六

C 王五

B 李四

A 張三

dtype: object

(6)重置索引

重置索引可以使用reindex()。如果index列表中的元素多於序列的值,可用fill_value=0這樣的語句填充。

s=s.reindex(['D','C','B','A'])

如果index列表中的元素多於序列的值,可用fill_value=0這樣的語句填充。

s=s.reindex(['D','C','B','A'], fill_value=0)


19.2.2 DataFrame

DataFrame(數據框架)用於存儲多行和多列的數據集合。它是Series的容器,類似於Excel中二維表格。

定義一個DataFrame的語法格式如下:

df=DataFrame({列名1 : 序列1,列名2 : 序列2,.......列名n : 序列n}, index=序列 )

例如,有如下二維表:



姓名

性別

年齡



張三

18



李四

19



王五

17







保存到DataFrame中可以用如下方法:

from pandas import Series

from pandas import DataFrame

name=Series(['張三','李四','王五'])

sex=Series(['男','女','男'])

age=Series([18,19,17])

df=DataFrame({'姓名':name,'性別':sex,'年齡':age})

print(df)

運行結果:

姓名 性別 年齡

0 張三 男 18

1 李四 女 19

2 王五 男 17

從上例可以看出,雖然我們省缺了索引,但系統自動添加了從0開始的索引值。


19.3 DataFrame的基本操作

1、訪問方式

(1)獲取行

print(df[1:2]) # 獲取第1行的值

輸出結果:

姓名 性別 年齡

1 李四 女 19

print(df[1:3]) #獲取第1行到第2行的值

輸出結果:

姓名 性別 年齡

1 李四 女 19

2 王五 男 17

(2)獲取列

print(df['姓名']) #獲取「姓名」列的值

輸出結果:

0 張三

1 李四

2 王五

Name: 姓名, dtype: object

另一種方法:

print(df[df.columns[0:1]]) #先按照索引號獲取列名,再按照列名讀取

輸出結果和上面的方法完全一致。

還有一種情況,是獲取唯一值,即將列內的重復值中多餘的刪除,僅留下互不相同的值。所用的到方法是unique()。

sex1=Series(df['性別'].unique())

print(sex1)

輸出結果:

0 男

1 女

dtype: object

(3)獲取指定位置的值

print(df.at[1,'姓名']) # 格式為變數名.at[行號,列名]

輸出結果:

李四

(4)獲取塊的值

print(df.iloc[0:2,1:3]) # 格式為變數名.iloc[行號1:行號2, 列號1:列號2]

輸出結果:

性別 年齡

0 男 18

1 女 19

print(df.iloc[:,1:2]) #獲取「性別」列的值

運行結果:

性別

0 男

1 女

2 男

2、修改、刪除、增加行和列

(1)修改列名

print(df.columns)

df.columns=['name','sex','age']

print(df.columns)

輸出結果:

Index(['姓名', '性別', '年齡'], dtype='object')

Index(['name', 'sex', 'age'], dtype='object')

可見,列名已經由「姓名、性別、年齡」修改為「age、sex、age」了。但這種修改必須把全部列名都一一列舉,不能有遺漏,否則就會出錯。如:

df.columns=['name','sex']

此時會報錯:ValueError: Length mismatch: Expected axis has 3 elements, new values have 2 elements。

(2)修改行索引

df.index=[1,2,3]

(3)刪除行

df.drop(1,axis=0) # axis=0表示行軸,也可以省略

(4)刪除列

df.drop(『性別』,axis=1) # axis=0表示列軸

也可以使用另一種方法:

del df['性別']

(5)增加列

df['電話']=[�',�',�']

print(df)

運行結果:

姓名 性別 年齡 電話

0 張三 男 18 1111111

1 李四 女 19 2222222

2 王五 男 17 3333333

(6)增加行

df.loc[len(df)]=['孫六','男',ཐ']

(7)追加

from pandas import Series

from pandas import DataFrame

name=Series(['張三','李四','王五'])

sex=Series(['男','女','男'])

age=Series([18,19,17])

df=DataFrame({'姓名':name,'性別':sex,'年齡':age}) # 建立DataFrame,變數名為df

name1=Series(['孫六','候七'])

sex1=Series(['男','女'])

age1=Series([19,17])

df1=DataFrame({'姓名':name1,'性別':sex1,'年齡':age1})

# 建立DataFrame,變數名為df1

df=df.append(df1,ignore_index=True)

# 將對df1追加到df後面,參數ignore_index=True表示重新索引

print(df)

運行結果:

姓名 性別 年齡

0 張三 男 18

1 李四 女 19

2 王五 男 17

3 孫六 男 19

4 候七 女 17

閱讀全文

與python修改列名相關的資料

熱點內容
好久不見app干什麼用的 瀏覽:141
壓縮包解壓碼對方可以更改嗎 瀏覽:254
pdf電子書製作軟體 瀏覽:888
數控三通編程 瀏覽:298
linux多終端 瀏覽:811
法律寫作pdf 瀏覽:144
國貨哪個品牌最好app 瀏覽:951
看哪個app給錢最多 瀏覽:178
編程靠經驗嗎 瀏覽:759
c教程pdf下載地址 瀏覽:573
製作視頻哪個app有瘦臉功能 瀏覽:649
linux查看線程內存 瀏覽:509
命令行簽名apk 瀏覽:92
網頁照片旋轉源碼 瀏覽:842
QQ會員頭像源碼 瀏覽:263
內核命令行 瀏覽:324
腳本提取源碼器 瀏覽:930
smo源碼 瀏覽:877
為什麼要搭建單獨伺服器 瀏覽:480
編譯器有什麼控制 瀏覽:893