-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
2、請(qǐng)問我怎么才能把下面這種帶空值的數(shù)據(jù)用python轉(zhuǎn)換成DataFrame格式?
4、2019-12-13 (一)使用Xlwings從Excel,取數(shù)至Pandas的DataFrame和Series
dataframe去除空值(dataframe去除空格)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于dataframe去除空值的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來(lái)看看吧。
ChatGPT國(guó)內(nèi)免費(fèi)在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端
官網(wǎng):https://ai.de1919.com
本文目錄:
一、pandas透視之后如何表頭很奇怪
百度知道
pandas透視之后如何表頭很奇怪
司徒為0f1
貢獻(xiàn)了超過424個(gè)回答
關(guān)注
成為第1位粉絲
1、修改表頭(columns)1、修改所有列列名如:a,b修改為A、B。df.columns = ['A','B']print(df)結(jié)果:A B0 1 11 2 22、只修改指定列列名如:a修改為Adf.rename(columns={'a':'A'},inplace=True)print(df)1212結(jié)果A b0 1 11 2 22 3 31其他df:任意的Pandas DataFrame對(duì)象s:任意的Pandas Series對(duì)象raw:行標(biāo)簽col:列標(biāo)簽導(dǎo)入依賴包:import pandas as pdimport numpy as np12121、導(dǎo)入數(shù)據(jù)pd.read_csv(filename_path):從CSV文件導(dǎo)入數(shù)據(jù)pd.read_table(filename_path):從限定分隔符的文本文件導(dǎo)入數(shù)據(jù)pd.read_excel(filename_path):從Excel文件導(dǎo)入數(shù)據(jù)pd.read_sql(query, connection_object):從SQL表/庫(kù)導(dǎo)入數(shù)據(jù)pd.read_json(json_string):從JSON格式的字符串導(dǎo)入數(shù)據(jù)pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格pd.read_clipboard():從你的粘貼板獲取內(nèi)容,并傳給read_table()pd.DataFrame(dict):從字典對(duì)象導(dǎo)入數(shù)據(jù),Key是列名,Value是數(shù)據(jù)2、導(dǎo)出數(shù)據(jù)df.to_csv(filename_path):導(dǎo)出數(shù)據(jù)到CSV文件df.to_excel(filename_path):導(dǎo)出數(shù)據(jù)到Excel文件df.to_sql(table_name, connection_object):導(dǎo)出數(shù)據(jù)到SQL表df.to_json(filename_path):以Json格式導(dǎo)出數(shù)據(jù)到文本文件3、創(chuàng)建測(cè)試數(shù)據(jù)pd.DataFrame(np.random.rand(20,5)):創(chuàng)建20行5列的隨機(jī)數(shù)組成的DataFrame對(duì)象pd.Series(my_list):從可迭代對(duì)象my_list創(chuàng)建一個(gè)Series對(duì)象df.index = pd.date_range('1900/1/30', periods=df.shape[0]):增加一個(gè)日期索引4、查看、檢查數(shù)據(jù)df.head(n):查看DataFrame對(duì)象的前n行(不加參數(shù),默認(rèn)前10行)df.tail(n):查看DataFrame對(duì)象的最后n行(不加參數(shù),默認(rèn)后10行)df.shape():查看行數(shù)和列數(shù)(維度查看)df.info():查看索引、數(shù)據(jù)類型和內(nèi)存信息df.describe():查看數(shù)值型列的匯總統(tǒng)計(jì)s.value_counts(dropna=False):查看Series對(duì)象的唯一值和計(jì)數(shù)df.apply(pd.Series.value_counts):查看DataFrame對(duì)象中每一列的唯一值和計(jì)數(shù)df.dtypes:查看每一列的數(shù)據(jù)類型(擴(kuò)展:df['two'].dtypes,查看“two”列的類型)df.isnull():查看空置(注:空置部分會(huì)用true顯示,不是空置False顯示)(擴(kuò)展:df['two'].isnull,查看“two”這一列的空置)df.values:查看數(shù)據(jù)表的值df.column5、數(shù)據(jù)選取(具體使用見https://www.cnblogs.com/luckyplj/p/13274662.html)df.isin([5]):判斷全部數(shù)據(jù)值中是否有5df[col].isin([5]):判斷列col中是否有5df[col]:根據(jù)列名,并以Series的形式返回列df[[col1, col2]]:以DataFrame形式返回多列s.iloc[0]:按位置選取行數(shù)據(jù)s.loc['index_one']:按索引選取行數(shù)據(jù)df.loc[:,'reviews'] 獲取指定列的數(shù)據(jù) 注意: 第一個(gè)參數(shù)為:表示所有行,第2個(gè)參數(shù)為列名,設(shè)置獲取列名為review的數(shù)據(jù)df.loc[[0,2],['customername','reviews','review_fenci']] 選擇指定的多行多列 參數(shù)說(shuō)明: [0,2] 這個(gè)列表有兩個(gè)元素0,2表示選擇第0行和第2行['customername','reviews','review_fenci']這個(gè)列表有3個(gè)元素表示選擇列名為'customername','reviews','review_fenci‘的這3列df.iloc[0,:]:返回第一行df.iloc[0,0]:返回第一行的第一個(gè)元素df.ix[0] 或 df.ix[raw] :ix函數(shù)可以根據(jù)行位置或行標(biāo)簽選擇行數(shù)據(jù)注:loc函數(shù)根據(jù)行/列標(biāo)簽(用戶自定義的行名、列名)進(jìn)行行選擇;iloc函數(shù)根據(jù)行/列位置(默認(rèn)的行列索引)進(jìn)行行選擇;6、數(shù)據(jù)清理df.columns = ['a','b','c']:重命名列名pd.isnull():檢查DataFrame對(duì)象中的空值,并返回一個(gè)Boolean數(shù)組pd.notnull():檢查DataFrame對(duì)象中的非空值,并返回一個(gè)Boolean數(shù)組df.dropna():刪除所有包含空值的行df.dropna(axis=1):刪除所有包含空值的列df.dropna(axis=1,thresh=n):刪除所有小于n個(gè)非空值的行df.fillna(x):用x替換DataFrame對(duì)象中所有的空值(注:fillna()會(huì)填充nan數(shù)據(jù),返回填充后的結(jié)果。如果希望在原DataFrame中修改,則把inplace設(shè)置為True。如,df.fillna(0,inplace=True))mydf['列名']=mydf['列名'].fillna(0) 某一列的空值補(bǔ)零s.astype(float):將Series中的數(shù)據(jù)類型更改為float類型df[col].astype(float):將DataFrame某列數(shù)據(jù)類型改為float類型s.replace(1,'first'):用‘first’代替所有等于1的值(替換的是值,不是列名也不是索引名)s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3df[col].replace(1,1.0,inplace=True):列col中的值1用1.0替換df.replace([1,3],['one','three'])df.rename(columns=lambda x: x + 1):批量更改列名df.rename(columns={'old_name': 'new_ name'}):選擇性更改列名df.set_index('column_one'):將column_one這一列變?yōu)樗饕衐f.rename(index=lambda x: x + 1):批量重命名索引df[col]=df[col].str.upper()或df[col].str.lower():基于列的大小寫轉(zhuǎn)換df[col]=df[col].map(str.strip):清除某列的空格df.drop_duplicates(subset=col,keep='fisrt',inplace=Flase)注:這個(gè)drop_duplicate方法是對(duì)DataFrame格式的數(shù)據(jù),去除特定列下面的重復(fù)行。返回DataFrame格式的數(shù)據(jù)。subset : column label or sequence of labels, optional 用來(lái)指定特定的列,默認(rèn)所有列keep : {‘first’, ‘last’, False}, default ‘first’ 刪除重復(fù)項(xiàng)并保留第一次出現(xiàn)的項(xiàng)inplace : boolean, default False 是直接在原來(lái)數(shù)據(jù)上修改還是保留一個(gè)副本7、數(shù)據(jù)處理df[df[col] > 0.5]:選擇col列的值大于0.5的行df.sort_values(col1):按照列col1排序數(shù)據(jù),默認(rèn)升序排列df.sort_values(col2, ascending=False):按照列col1降序排列數(shù)據(jù)df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列數(shù)據(jù)df.groupby(col):返回一個(gè)按列col進(jìn)行分組的Groupby對(duì)象df.groupby([col1,col2]):返回一個(gè)按多列進(jìn)行分組的Groupby對(duì)象df.groupby(col1)[col2]:返回按列col1進(jìn)行分組后,列col2的均值df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):創(chuàng)建一個(gè)按列col1進(jìn)行分組,并計(jì)算col2和col3的最大值的數(shù)據(jù)透視表df.groupby(col1).agg(np.mean):返回按列col1分組的所有列的均值data.apply(np.mean):對(duì)DataFrame中的每一列應(yīng)用函數(shù)np.meandata.apply(np.max,axis=1):對(duì)DataFrame中的每一行應(yīng)用函數(shù)np.maxdf.isin8、數(shù)據(jù)合并df1.append(df2):將df2中的行添加到df1的尾部df.concat([df1, df2],axis=1):將df2中的列添加到df1的尾部df1.join(df2,on=col1,how='inner'):對(duì)df1的列和df2的列執(zhí)行SQL形式的join9、數(shù)據(jù)統(tǒng)計(jì)
二、請(qǐng)問我怎么才能把下面這種帶空值的數(shù)據(jù)用python轉(zhuǎn)換成DataFrame格式?
用pandas庫(kù)啊
看你的數(shù)據(jù)是什么格式,是txt還是html?
可能需要先稍稍整理下才能直接導(dǎo)入為DataFrame
三、python數(shù)據(jù)分析2:DataFrame對(duì)象
DataFrame對(duì)象:二維表數(shù)據(jù)結(jié)構(gòu),由行列數(shù)據(jù)組成的表格
常用index表示行,columns表示列
'''
語(yǔ)文 數(shù)學(xué) 英語(yǔ)
0 110 105 99
1 105 88 115
2 109 120 130
'''
# print(df.columns) # Index(['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)'], dtype='object')
# print(df.index) # Int64Index([0, 1, 2], dtype='int64')
# 遍歷DataFrame數(shù)據(jù)的每一列
'''
0 110
1 105
2 109
Name: 語(yǔ)文, dtype: int64
0 105
1 88
2 120
Name: 數(shù)學(xué), dtype: int64
0 99
1 115
2 130
Name: 英語(yǔ), dtype: int64
'''
1.創(chuàng)建一個(gè)DataFrame對(duì)象
pandas.DataFrame(data,index,columns,dtype,copy)
# data表示數(shù)據(jù),可以是ndarray數(shù)組,series對(duì)象、列表、字典等
# index表示行標(biāo)簽(索引)
# columns表示列標(biāo)簽(索引)
# dtype每一列數(shù)據(jù)的數(shù)據(jù)類型
# copy用于復(fù)制數(shù)據(jù)
# 返回值DataFrame
通過二維數(shù)組創(chuàng)建成績(jī)表
'''
語(yǔ)文 數(shù)學(xué) 英語(yǔ)
0 110 105 99
1 105 88 115
2 109 120 130
'''
2.通過字典創(chuàng)建DataFrame對(duì)象
value值只能是一維數(shù)組或單個(gè)的簡(jiǎn)單數(shù)據(jù)類型
# 數(shù)組,則要求所有的數(shù)組長(zhǎng)度一致
# 單個(gè)數(shù)據(jù),每行都需要添加相同數(shù)據(jù)
'''
語(yǔ)文 數(shù)學(xué) 英語(yǔ) 班級(jí)
0 110 105 109 高一7班
1 105 88 120 高一7班
2 99 115 130 高一7班
'''
'''
【DataFrame屬性】
values 查看所有元素的值 df.values
dtypes 查看所有元素的類型 df.dtypes
index 查看所有行名、重命名行名 df.index df.index=[1,2,3]
columns 查看所有列名、重命名列名 df.columns df.columns=['語(yǔ)','數(shù)']
T 行列數(shù)據(jù)轉(zhuǎn)換 df.T
head 查看前n條數(shù)據(jù),默認(rèn)5條 df.head() df.head(10)
tail 查看后n條數(shù)據(jù),默認(rèn)5條 df.tail() df.tail(10)
shape 查看行數(shù)和列數(shù),[0]表示行,[1]表示列 df.shape[0] df.shape[1]
info 查看索引,數(shù)據(jù)類型和內(nèi)存信息 df.info
【DataFrame函數(shù)】
describe 查看每列的統(tǒng)計(jì)匯總信息,DataFrame類型 df.describe()
count 返回每一列中的非空值的個(gè)數(shù) df.count()
sum 返回每一列和和,無(wú)法計(jì)算返回空值 df.sum()
max 返回每一列的最大值 df.max()
min 返回每一列的最小值 df.min()
argmax 返回最大值所在的自動(dòng)索引位置 df.argmax()
argmin 返回最小值所在的自動(dòng)索引位置 df.argmin()
idxmax 返回最大值所在的自定義索引位置 df.idxmax()
idxmin 返回最小值所在的自定義索引位置 df.idxmin()
mean 返回每一列的平均值 df.mean()
median 返回每一列的中位數(shù) df.median()
var 返回每一列的方差 df.var()
std 返回每一列的標(biāo)準(zhǔn)差 df.std()
isnull 檢查df中的空值,空值為True,否則為False,返回布爾型數(shù)組 df.isnull()
notnull 檢查df中的空值,非空值為True,否則為False,返回布爾型數(shù)組 df.notnull()
中位數(shù)又稱中值,是指按順序排列的一組數(shù)據(jù)中居于中間位置的數(shù)
方差用于度量單個(gè)隨機(jī)變量的離散程序(不連續(xù)程度)
標(biāo)準(zhǔn)差是方差的算術(shù)平方根,反映數(shù)據(jù)集的離散程度
'''
3. 導(dǎo)入.xls或.xlsx文件
# pandas.read_excel(io,sheetname=0,header=0,names=None,index_col=None,usecols=None,squeeze=False,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skiprows=None,nrow=None,na_values=None,keep_defalut_na=True,verbose=False,parse_dates=False,date_parser=None,thousands=None,comment=None,skipfooter=0,conver_float=True,mangle_dupe_cols=True,**kwds)
'''
io 字符串,xls或xlsx文件路徑或類文件對(duì)象
sheet_name:None、字符串、整數(shù)、字符串列表或整數(shù)列表,默認(rèn)值為0
字符串用于工作表名稱;整數(shù)為索引,表示工作表位置
字符串列表或整數(shù)列表用于請(qǐng)求多個(gè)工作表,為None時(shí)則獲取所有的工作表
sheet_name = 0 第一個(gè)Sheet頁(yè)中的數(shù)據(jù)作為DataFrame對(duì)象
sheet_name = 1 第二個(gè)Sheet頁(yè)中的數(shù)據(jù)作為DataFrame對(duì)象
sheet_name = 'Sheet1' 名為Sheet1的Sheet頁(yè)中的數(shù)據(jù)作為DataFrame對(duì)象
sheet_name = [0,1,'Sheet3'] 第一個(gè),第二個(gè)和名為Sheet3的Sheet頁(yè)中的數(shù)據(jù)作為DataFrame對(duì)象
header:指定作為列名的行,默認(rèn)值為0,即取第一行的值為列名。或數(shù)據(jù)不包含列名,則為header=None
names:默認(rèn)值為None,要使用的列名列表
index_col:指定列為索引列,默認(rèn)值為None,索引0是DataFrame對(duì)象的行標(biāo)簽
usecols:int、list或字符串,默認(rèn)值為None
如為None,則解析所有列
如為int,則解析最后一列
如為list列表,則解析列號(hào)和列表的列
如為字符串,則表示以逗號(hào)分隔的Excel列字母和列范圍列表
squeeze:布爾值,默認(rèn)為False,如果解析的數(shù)據(jù)只包含一列,則返回一個(gè)Series
dtype:列的數(shù)據(jù)類型名稱為字典,默認(rèn)值為None
skiprows:省略指定行數(shù)的數(shù)據(jù),從第一行開始
skipfooter:省略指定行數(shù)的數(shù)據(jù),從尾部數(shù)的行開始
4.導(dǎo)入指定Sheet頁(yè)的數(shù)據(jù)
# sheet_name=0表示第一個(gè)sheet頁(yè)的數(shù)據(jù),以此類推,如果不指定,則導(dǎo)入第一頁(yè)
5.指定行索引導(dǎo)入Excel數(shù)據(jù)
'''
Empty DataFrame
Columns: []
Index: [1, 3, 5]
'''
# 導(dǎo)入第一列數(shù)據(jù)
'''
Empty DataFrame
Columns: []
Index: [1, 3, 5]
'''
四、2019-12-13 (一)使用Xlwings從Excel,取數(shù)至Pandas的DataFrame和Series
"""
Createdon Mon Jul 8 22:05:32 2019
@author:
same3
"""
我們通過Xlwings 調(diào)用 Excel特定區(qū)域的數(shù)據(jù)集,將用來(lái)測(cè)試Panda對(duì)于None值/NaN/null/空值(以下統(tǒng)稱空值)的處理,本次我們將會(huì)學(xué)到:
對(duì)含有空值的DataFrame進(jìn)行各種選擇操作,以及對(duì)空值數(shù)據(jù)的填充fillna()、刪除dropna(),我們將在后面陸續(xù)介紹。
筆者是技術(shù)進(jìn)步的擁躉,Python 的IDE:Spyder,從剛開始是Python(x,y)的作者為Python開發(fā)的一個(gè)簡(jiǎn)單的集成開發(fā)環(huán)境,發(fā)展到現(xiàn)在V4.0白、富、美的開發(fā)環(huán)境,著實(shí)令人驚艷!感謝這個(gè)世界上眾多無(wú)私付出、默默耕耘的人們,有了你們,世界越來(lái)越好!
和其他的Python開發(fā)環(huán)境相比,Spyder最大的優(yōu)點(diǎn)就是模仿MATLAB的“工作空間”的功能,可以很方便地觀察和修改對(duì)象的值。
學(xué)習(xí)使用spyder(python IDE) 參考資料:https://blog.csdn.net/u010547283/article/details/76860428
'''
##引入三個(gè)Python 包
##Pandas:數(shù)據(jù)分析包
import pandas as pd
#"as"顧名思義,即以后可以在程序中以縮寫pd 代表 pandas
#numpy:科學(xué)計(jì)算包
import numpy as np
##xlwings:python操作Excel的模塊,最好的Excel操作包之一,有取代VBA的趨勢(shì)
## xlwings中文入門學(xué)習(xí)資料之一:https://www.cnblogs.com/catgatp/p/7875683.html
## xlwings英文官方學(xué)習(xí)網(wǎng)站https://docs.xlwings.org/en/stable/
import xlwings as xw
##聲明Excel應(yīng)用程序,及workboos文件路徑
file= r'D:\VBA\LEARNING_ERP.xlsm'
#字符串前面加r,是表示其后的字符串不轉(zhuǎn)義,使用真實(shí)字符
wb=xw.Book(file)
wb.app.display_alerts=False
#禁止Excel彈出提示的對(duì)話框
#“view”作為存放結(jié)果數(shù)據(jù)集的sheet表
sht_view=wb.sheets['view']
##“基礎(chǔ)表”作為存放原始數(shù)據(jù)集的sheet表
sht_base=wb.sheets['基礎(chǔ)表']
##讓我們看一下Excel中的原始數(shù)據(jù)吧:
'''選中存放原始數(shù)據(jù)集所在的區(qū)域,將數(shù)據(jù)導(dǎo)入Series
第25行第9列,可以使用sheet.range(row,column)的方法,也可以使用sheet[row-1,
column-1]的方法,第一種方法是標(biāo)準(zhǔn)的VB-Excel風(fēng)格,下標(biāo)從1開始,使用小括號(hào)();第二種方法遵循的是Python風(fēng)格,下標(biāo)從0開始,使用中括號(hào)[]。'''
s_choose=sht_base.range(25,9).options(pd.Series,expand='table').value
## expand='table',指示將從單元格沿right、down擴(kuò)展取數(shù),詳見Xlwings文檔。
'''按F5運(yùn)行程序,然后在IDE右下方的即時(shí)窗口In[ ]:后面輸入print(s_choose),按回車,顯示如下:'''
##上面是VB-Excel風(fēng)格,試一下第二種方法,遵循的是Python風(fēng)格
s_choose=sht_base[24,8].options(pd.Series,expand='table').value
##可見兩種方法,結(jié)果是一樣的
##選中employee 所在的區(qū)域,第25行第1列
range_employee=sht_base[25,1].api.currentregion
##命名區(qū)域
range_employee.name='range_employee'
##導(dǎo)入Dataframe
df_employee=sht_base['range_employee'].options(pd.DataFrame,header=1,index=True).value
'''index=True,指示使用原始數(shù)據(jù)集中的索引默認(rèn)第一列,而不是使用自動(dòng)索引,自動(dòng)索引從0開始
header=1,指示使用原始數(shù)據(jù)集中的第一行作為列名,而不是使用自動(dòng)列名,更多使用方法,將在后面陸續(xù)介紹。'''
#按F5運(yùn)行程序,然后在IDE右下方的即時(shí)窗口In:后面輸入print(df_employee),按回車,顯示如下:
##計(jì)算機(jī)顯示的時(shí)候,對(duì)齊有跑題的嫌疑(對(duì)不上標(biāo)題),不過,習(xí)慣了就好!
以上就是關(guān)于dataframe去除空值相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
小紅書賣什么東西比較好做(小紅書賣什么東西比較好做一點(diǎn))