Pandas库常用函数和操作
目錄
- 1. DataFrame 處理缺失值 ?dropna()
- 2. 根據(jù)某維度計(jì)算重復(fù)的行 ? duplicated()、value_counts()
- 3. 去重 ?drop_duplicates()
- 4. 拼接
- (1) 拼接列?merge()
- (2) 拼接行?
- 5. 找出在某一特定維度為空值的所有行
- 6. 指定dataframe的維度及順序; 保存數(shù)據(jù)csv文件
- 7. 保存到文件
- 7.1?讀寫excel/csv格式文件
- 7.2 將多張DataFrame表寫入到同一個(gè)excel文件的不同sheet中
- 7.3 向一個(gè)已經(jīng)存在的excel文件中寫入一張新sheet;如果文件不存在則創(chuàng)建一個(gè)新文件再寫入
- 7.4 讀取excel文本中的多個(gè)sheet
- 8. 排序
- 9. 軸標(biāo)簽重命名?df.rename()(列重命名、行index重命名)
- 10.?數(shù)據(jù)選取,修改,切片
- 10.1?loc
- 10.2?iloc
- 11. 判斷某個(gè)cell是否為空
- 12. Dataframe值替換
- 13. Dataframe篩選數(shù)據(jù)
- 14. 其它常用操作
- 15. 遇到的問(wèn)題和解決方法
- 15.1??df.to_excel(fout)?報(bào)錯(cuò)"openpyxl.utils.exceptions.IllegalCharacterError"
- 15.2? 保存文件時(shí)報(bào)錯(cuò)"UserWarning: Ignoring URL 'http://www.xxxxxxx' with link or location/anchor > 255 characters since it exceeds Excel's limit for URLS"
?
?
回到頂部1. DataFrame 處理缺失值 ?dropna()
df2.dropna(axis=0, how='any', subset=[u'ToC'], inplace=True)
把在ToC列有缺失值的行去掉
?
補(bǔ)充:還可以用df.fillna()來(lái)把缺失值替換為某個(gè)特殊標(biāo)記
df = df.fillna("missing") # 用字符串替代
df = df.fillna(df.mean()) # 用均值或者其它描述性統(tǒng)計(jì)值替代 ?
回到頂部2. 根據(jù)某維度計(jì)算重復(fù)的行 ??duplicated()、value_counts()
print df.duplicated(['name']).value_counts() # 如果不指定列,默認(rèn)會(huì)判斷所有列 """ 輸出: False 11118 True 664 表示有664行是重復(fù)的 """
duplicated()方法返回一個(gè)布爾型的Series,顯示各行是否為重復(fù)行,非重復(fù)行顯示為False,重復(fù)行顯示為True
value_counts()方法統(tǒng)計(jì)數(shù)組或序列所有元素出現(xiàn)次數(shù),對(duì)某一列統(tǒng)計(jì)可以直接用df.column_name.value_counts()
?
回到頂部3. 去重 ?drop_duplicates()
df.drop_duplicates(['name'], keep='last', inplace=True)
"""
keep : {‘first’, ‘last’, False}, default ‘first’first : Drop duplicates except for the first occurrence.last : Drop duplicates except for the last occurrence.False : Drop all duplicates.
""" ?
回到頂部4. 拼接
(1) 拼接列?merge()
result = pd.merge(left, right, on='name', how='inner')
"""
其它參數(shù):
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False)Examples
>>> A >>> Blkey value rkey value
0 foo 1 0 foo 5
1 bar 2 1 bar 6
2 baz 3 2 qux 7
3 foo 4 3 bar 8>>> A.merge(B, left_on='lkey', right_on='rkey', how='outer')lkey value_x rkey value_y
0 foo 1 foo 5
1 foo 4 foo 5
2 bar 2 bar 6
3 bar 2 bar 8
4 baz 3 NaN NaN
5 NaN NaN qux 7
""" 其它參考:Merge, join, and concatenate
?
(2) 拼接行?
def concat_by_row(data_dir, fout):dfs = []for filename in os.listdir(data_dir):dfs.append(pd.read_excel(os.path.join(data_dir, filename)))print(dfs[-1].shape, filename)
df = pd.concat(dfs, axis=0, ignore_index=True) # axis=0按行拼接;axis=1按列拼接print(df.shape)df.to_excel(fout, index=False) ?
回到頂部5. 找出在某一特定維度為空值的所有行
bool_arr = df.name.notnull() print bool_arr.value_counts() for idx, value in bool_arr.iteritems():if not value:print '\n', idx, valueprint df.iloc[idx]
?
回到頂部6. 指定dataframe的維度及順序; 保存數(shù)據(jù)csv文件
res = {'name':[], 'buss':[], 'label':[]}
with codecs.open(fname, encoding='utf8') as fr:for idx, line in enumerate(fr):item = json.loads(line)res['name'].append(item['name']) res['buss'].append(item['buss']) res['label'].append(item['label'])
df = pd.DataFrame(res, columns=['name', 'buss', 'label'])
df.to_csv('data/xxx.csv', index=False, encoding='utf-8') ?
回到頂部7. 保存到文件
7.1?讀寫excel/csv格式文件
import pandas as pddef dataframe_read_and_write(fin, fout): # 讀取fin文件,添加一列"新應(yīng)答"df = pd.read_excel(fin)# df = read_csv(fin, encoding='utf-8')print df.head()fields = [u"序號(hào)", u"問(wèn)題描述", u"原始應(yīng)答", u"新應(yīng)答"]data_out = defaultdict(list)for idx, row in df.iterrows():try:row = row.to_dict()new_answer = "xxxxxx"for field in fields[:-1]:data_out[field].append(row[field])data_out[fields[-1]].append(new_answer)except Exception as error:print "Error line", idx, errordf_out = pd.DataFrame(data_out, columns=fields)df_out.to_excel(fout, sheet_name="Sheet1", index=False, header=True)# df_out.to_csv(fout, index=False, encoding="utf-8")if __name__ == '__main__':dataframe_read_and_write(fin="data/tmp.xlsx", fout="data/tmp_out.xlsx")
?
7.2 將多張DataFrame表寫入到同一個(gè)excel文件的不同sheet中
import pandas as pd
writer = pd.ExcelWriter('foo.xlsx')
df.to_excel(writer, 'Data 0')
df.to_excel(writer, 'Data 1')
writer.save() ?
7.3 向一個(gè)已經(jīng)存在的excel文件中寫入一張新sheet;如果文件不存在則創(chuàng)建一個(gè)新文件再寫入
import pandas from openpyxl import load_workbookdef add_new_sheet(df, fout, sheet_name='Sheet1', columns=None):if fout and os.path.exists(fout):book = load_workbook(fout)writer = pd.ExcelWriter(fout, engine='openpyxl')writer.book = bookwriter.sheets = dict((ws.title, ws) for ws in book.worksheets)else:writer = pd.ExcelWriter(fout)df.to_excel(writer, sheet_name=sheet_name, columns=columns, index=False)writer.save()add_new_sheet(df, fout='Masterfile.xlsx', sheet_name="Main", columns=['Diff1', 'Diff2'])
參考:官方解決方案https://github.com/pandas-dev/pandas/issues/3441
?
7.4 讀取excel文本中的多個(gè)sheet
import xlrdworkbook = xlrd.open_workbook(fin) for sheet in workbook.sheets():df = pd.read_excel(fin, sheet_name=sheet.name, index_col=None)
?
回到頂部8. 排序
def sort_dataframe(df, fields_to_sort, fout=None):df = df.sort_values(by=fields_to_sort, ascending=True)if fout:df.to_excel(fout, index=False)return dfdf = pd.read_excel(data_file) sort_dataframe(df, fields_to_sort=["column_A", "column_B"], fout=data_file)df = pd.read_excel(data_file) # note: index改變,需要從文件重新讀取,才會(huì)是有序的,后面遍歷df的時(shí)候才不會(huì)出問(wèn)題 print(df.head(10))
?
回到頂部9. 軸標(biāo)簽重命名?df.rename()(列重命名、行index重命名)
>>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
>>> df.rename(index=str, columns={"A": "a", "B": "c"})a c
0 1 4
1 2 5
2 3 6>>> df.rename(index=str, columns={"A": "a", "C": "c"})a B
0 1 4
1 2 5
2 3 6Using axis-style parameters>>> df.rename(str.lower, axis='columns')a b
0 1 4
1 2 5
2 3 6>>> df.rename({1: 2, 2: 4}, axis='index')A B
0 1 4
2 2 5
4 3 6 參數(shù)說(shuō)明:
?df.rename()參數(shù)說(shuō)明?
回到頂部10.?數(shù)據(jù)選取,修改,切片
10.1?loc
在知道列名字的情況下,df.loc[index,column] 選取指定行,列的數(shù)據(jù)
# df.loc[index, column_name],選取指定行和列的數(shù)據(jù) df.loc[0,'name'] # 'Snow' df.loc[0:2, ['name','age']] #選取第0行到第2行,name列和age列的數(shù)據(jù), 注意這里的行選取是包含下標(biāo)的。 df.loc[[2,3],['name','age']] #選取指定的第2行和第3行,name和age列的數(shù)據(jù) df.loc[df['gender']=='M','name'] #選取gender列是M,name列的數(shù)據(jù) df.loc[df['gender']=='M',['name','age']] #選取gender列是M,name和age列的數(shù)據(jù)
10.2?iloc
在column name特別長(zhǎng)或者index是時(shí)間序列等各種不方便輸入的情況下,可以用iloc (i = index), iloc完全用數(shù)字來(lái)定位 iloc[row_index, column_index]
df.iloc[0,0] #第0行第0列的數(shù)據(jù),'Snow' df.iloc[1,2] #第1行第2列的數(shù)據(jù),32 df.iloc[[1,3],0:2] #第1行和第3行,從第0列到第2列(不包含第2列)的數(shù)據(jù) df.iloc[1:3,[1,2] #第1行到第3行(不包含第3行),第1列和第2列的數(shù)據(jù)
更多參考:
https://blog.csdn.net/yoonhee/article/details/76168253
?
回到頂部11. 判斷某個(gè)cell是否為空
if str(line["col_a"]).strip() == "nan":pass?
?
回到頂部12. Dataframe值替換
df["col_a"] = df["col_a"].replace({"b": "C", "e": "G"}) ?
更多參考:https://jingyan.baidu.com/article/454316ab4d0e64f7a6c03a41.html
?
回到頂部13. Dataframe篩選數(shù)據(jù)
df2 = df[df["col_a"] == "cc"] # 等于某個(gè)值 df3 = df[df["col_a"].isin(["bb", "cc", "ee"])] # 取值在某個(gè)范圍內(nèi)
?
更多參考:https://jingyan.baidu.com/article/0eb457e508b6d303f0a90572.html
?
回到頂部14. 其它常用操作
# df = pd.read_csv("../../data/data_part1.txt", sep="$")df = pd.read_csv("data/data_part1.csv", low_memory=False)# 數(shù)據(jù)概覽df.info()df.describe() # ==> 只顯示float型維度的[count, mean, std, min]等統(tǒng)計(jì)信息, 例如0108, 3816, 2453, 0112, 2428, 2304# 數(shù)據(jù)查看df.head(n=5) # 查看開(kāi)頭幾行, 默認(rèn)n=5df.tail(n=5) # 查看末尾幾行, 默認(rèn)n=5df.shape # 查看行列維度df.columns # 查看列名和列數(shù)df.dtypes # 查看數(shù)據(jù)類型 ==> 可以看到哪些維度的數(shù)值是object型/float型df["0108"].hist() # 查看變量分布df["0108"].unique() # 查看有哪些取值df["0108"].value_counts() # 查看這一列的值統(tǒng)計(jì)# 缺失值統(tǒng)計(jì)df.isnull().sum() # 查看每一列缺失值情況df["n_null"] = df.isnull().sum(axis=1) # 查看每一行缺失值情況# 缺失值填充mode_df = df.fillna(df.mode().iloc[0], inplace=True) # 用眾數(shù)填充median_df = df.fillna(df.median()) # 用中位數(shù)填充df["0108"][df.vid.isnull()] = "0" # 對(duì)某一列填充 ?
回到頂部15. 遇到的問(wèn)題和解決方法
15.1??df.to_excel(fout)?報(bào)錯(cuò)"openpyxl.utils.exceptions.IllegalCharacterError"
(step 1)??pip?install?xlsxwriter?
(step 2)?df.to_excel(fout, engine="xlsxwriter")?
?
15.2? 保存文件時(shí)報(bào)錯(cuò)"UserWarning: Ignoring URL 'http://www.xxxxxxx' with link or location/anchor > 255 characters since it exceeds Excel's limit for URLS"
writer = pd.ExcelWriter(fout, engine="xlsxwriter", options={'strings_to_urls': False})
df.to_excel(writer, index=False)
writer.save() ?
?
參考:
https://blog.csdn.net/wangquannuaa/article/details/43988719
https://blog.csdn.net/wangquannuaa/article/details/43984095
分類:?Python 好文要頂?收藏該文?? 焦距關(guān)注 - 5
粉絲 - 8 +加關(guān)注 0 0 ??上一篇:[Linux] 終端設(shè)置只顯示當(dāng)前目錄及終端美化
??下一篇:awk結(jié)合正則匹配 posted @?2017-08-02 16:04?焦距?閱讀(2568) 評(píng)論(0)?編輯?收藏 刷新評(píng)論刷新頁(yè)面返回頂部 發(fā)表評(píng)論
昵稱:
評(píng)論內(nèi)容: ??????退出?訂閱評(píng)論
[Ctrl+Enter快捷鍵提交]
【推薦】超50萬(wàn)C++/C#源碼: 大型實(shí)時(shí)仿真組態(tài)圖形源碼【前端】SpreadJS表格控件,可嵌入系統(tǒng)開(kāi)發(fā)的在線Excel
【推薦】碼云企業(yè)版,高效的企業(yè)級(jí)軟件協(xié)作開(kāi)發(fā)管理平臺(tái)
【推薦】程序員問(wèn)答平臺(tái),解決您開(kāi)發(fā)中遇到的技術(shù)難題 相關(guān)博文:
·?2,Python常用庫(kù)之二:Pandas
·?數(shù)據(jù)處理之pandas庫(kù)
·?pandas常用
·?python之pandas數(shù)據(jù)篩選和csv操作
·?數(shù)據(jù)清理,預(yù)處理pandasdataframe操作技巧總結(jié) 最新新聞:
·?剩1/279都能再生的魔幻動(dòng)物:切斷再生一時(shí)爽,一直切一直爽
·?德國(guó)對(duì)臉書開(kāi)出200萬(wàn)罰單:因處理網(wǎng)絡(luò)仇恨言論不力
·?新陳代謝是如何開(kāi)始的?
·?教育部:已約談?dòng)嘘P(guān)搜索引擎網(wǎng)站 整治“志愿填報(bào)指導(dǎo)”
·?萬(wàn)字長(zhǎng)文:無(wú)論何時(shí)何地,亞馬遜都在“注視”著你
??更多新聞...
公告
昵稱:焦距園齡:2年
粉絲:8
關(guān)注:5 +加關(guān)注
| |||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
|---|---|---|---|---|---|---|---|---|---|
| 30 | 1 | 2 | 3 | 4 | 5 | 6 | |||
| 7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
| 21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
| 28 | 29 | 30 | 31 | 1 | 2 | 3 | |||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
搜索
常用鏈接
- 我的隨筆
- 我的評(píng)論
- 我的參與
- 最新評(píng)論
- 我的標(biāo)簽
隨筆分類
- Database(3)
- GitHub(2)
- Java(2)
- Keras(11)
- Leetcode(12)
- Linux(39)
- LNMP
- MacOS
- Maven(1)
- Python(31)
- Titan
- Web(3)
- 對(duì)話系統(tǒng)(1)
- 分布式(1)
- 工具安裝使用(22)
- 機(jī)器學(xué)習(xí)(9)
- 計(jì)算機(jī)視覺(jué)
- 爬蟲(chóng)(1)
- 深度學(xué)習(xí)(1)
- 推薦系統(tǒng)(1)
- 系統(tǒng)和硬件(2)
- 雜七雜八
- 知識(shí)圖譜(2)
- 自然語(yǔ)言處理(17)
隨筆檔案
- 2019年4月 (2)
- 2019年3月 (2)
- 2018年11月 (1)
- 2018年10月 (4)
- 2018年9月 (15)
- 2018年8月 (5)
- 2018年7月 (3)
- 2018年6月 (4)
- 2018年5月 (10)
- 2018年4月 (8)
- 2018年3月 (6)
- 2018年2月 (7)
- 2018年1月 (7)
- 2017年12月 (13)
- 2017年11月 (3)
- 2017年10月 (1)
- 2017年9月 (10)
- 2017年8月 (24)
- 2017年7月 (1)
閱讀排行榜
- 1. Linux 大文件的分割與合并(21403)
- 2. [Linux] sed命令使用之在文件中快速刪除/增加指定行(17071)
- 3. [NLP] TextCNN模型原理和實(shí)現(xiàn)(15465)
- 4. [Python] RuntimeError: Invalid DISPLAY variable(10641)
- 5. [Python] 項(xiàng)目打包發(fā)布(9567)
評(píng)論排行榜
- 1. 【轉(zhuǎn)】一張圖解析FastAdmin中的表格列表的功能(4)
- 2. [Linux] 輸出文件的指定行(1)
- 3. linux下awk內(nèi)置函數(shù)的使用(split/substr/length)(1)
- 4. Linux 去重 先sort再uniq(1)
- 5. awk命令結(jié)合管道命令對(duì)json文件進(jìn)行統(tǒng)計(jì)分析(1)
推薦排行榜
- 1. [Linux] sed命令使用之在文件中快速刪除/增加指定行(2)
- 2. 利用pandas隨機(jī)切分csv文件(2)
- 3. keras模型可視化及解決'Failed to import pydot'問(wèn)題(1)
- 4. [Linux] 虛擬環(huán)境的配置和使用 virtualenv(1)
- 5. keras 報(bào)錯(cuò) ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("embedding_1/random_uniform:0", shape=(5001, 128), dtype=float32)'(1)
總結(jié)
以上是生活随笔為你收集整理的Pandas库常用函数和操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 梯度下降优化算法综述与PyTorch实现
- 下一篇: PyTorch中文文档 说明书