回到顶部

1. DataFrame 处理缺失值  dropna()

df2.dropna(axis=0, how='any', subset=[u'ToC'], inplace=True)

把在ToC列有缺失值的行去掉

补充:还可以用df.fillna()来把缺失值替换为某个特殊标记

df = df.fillna("missing")  # 用字符串替代
df = df.fillna(df.mean())  # 用均值或者其它描述性统计值替代

回到顶部

2. 根据某维度计算重复的行   duplicated()、value_counts()

print df.duplicated(['name']).value_counts()  # 如果不指定列,默认会判断所有列
"""
输出:
False    11118
True       664
表示有664行是重复的
"""

duplicated()方法返回一个布尔型的Series,显示各行是否为重复行,非重复行显示为False,重复行显示为True

value_counts()方法统计数组或序列所有元素出现次数,对某一列统计可以直接用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')
"""
其它参数:
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的维度及顺序; 保存数据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文件,添加一列"新应答"df = pd.read_excel(fin)# df = read_csv(fin, encoding='utf-8')print df.head()fields = [u"序号", u"问题描述", u"原始应答", u"新应答"]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表写入到同一个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 向一个已经存在的excel文件中写入一张新sheet;如果文件不存在则创建一个新文件再写入

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文本中的多个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改变,需要从文件重新读取,才会是有序的,后面遍历df的时候才不会出问题
print(df.head(10))

回到顶部

9. 轴标签重命名 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

参数说明:

 df.rename()参数说明
回到顶部

10. 数据选取,修改,切片

10.1 loc

在知道列名字的情况下,df.loc[index,column] 选取指定行,列的数据

# df.loc[index, column_name],选取指定行和列的数据
df.loc[0,'name'] # 'Snow'
df.loc[0:2, ['name','age']]          #选取第0行到第2行,name列和age列的数据, 注意这里的行选取是包含下标的。
df.loc[[2,3],['name','age']]          #选取指定的第2行和第3行,name和age列的数据
df.loc[df['gender']=='M','name']      #选取gender列是M,name列的数据
df.loc[df['gender']=='M',['name','age']] #选取gender列是M,name和age列的数据

10.2 iloc

在column name特别长或者index是时间序列等各种不方便输入的情况下,可以用iloc (i = index), iloc完全用数字来定位 iloc[row_index, column_index]

df.iloc[0,0]        #第0行第0列的数据,'Snow'
df.iloc[1,2]        #第1行第2列的数据,32
df.iloc[[1,3],0:2]    #第1行和第3行,从第0列到第2列(不包含第2列)的数据
df.iloc[1:3,[1,2]    #第1行到第3行(不包含第3行),第1列和第2列的数据

更多参考:

https://blog.csdn.net/yoonhee/article/details/76168253

回到顶部

11. 判断某个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筛选数据

df2 = df[df["col_a"] == "cc"]  # 等于某个值
df3 = df[df["col_a"].isin(["bb", "cc", "ee"])]  # 取值在某个范围内

更多参考: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)# 数据概览df.info()df.describe()  # ==> 只显示float型维度的[count, mean, std, min]等统计信息, 例如0108, 3816, 2453, 0112, 2428, 2304# 数据查看df.head(n=5)  # 查看开头几行, 默认n=5df.tail(n=5)  # 查看末尾几行, 默认n=5df.shape  # 查看行列维度df.columns  # 查看列名和列数df.dtypes     # 查看数据类型   ==> 可以看到哪些维度的数值是object型/float型df["0108"].hist()  # 查看变量分布df["0108"].unique()  # 查看有哪些取值df["0108"].value_counts()  # 查看这一列的值统计# 缺失值统计df.isnull().sum()  # 查看每一列缺失值情况df["n_null"] = df.isnull().sum(axis=1)  # 查看每一行缺失值情况# 缺失值填充mode_df = df.fillna(df.mode().iloc[0], inplace=True)  # 用众数填充median_df = df.fillna(df.median())  # 用中位数填充df["0108"][df.vid.isnull()] = "0"  # 对某一列填充

回到顶部

15. 遇到的问题和解决方法

15.1  df.to_excel(fout) 报错"openpyxl.utils.exceptions.IllegalCharacterError"

(step 1)  pip install xlsxwriter

(step 2) df.to_excel(fout, engine="xlsxwriter")

15.2  保存文件时报错"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
好文要顶 收藏该文  

焦距
关注 - 5
粉丝 - 8

+加关注

0
0

« 上一篇:[Linux] 终端设置只显示当前目录及终端美化
» 下一篇:awk结合正则匹配

posted @ 2017-08-02 16:04 焦距 阅读(2568) 评论(0) 编辑 收藏

发表评论

昵称:

评论内容:
     

退出 订阅评论

[Ctrl+Enter快捷键提交]

【推荐】超50万C++/C#源码: 大型实时仿真组态图形源码
【前端】SpreadJS表格控件,可嵌入系统开发的在线Excel
【推荐】码云企业版,高效的企业级软件协作开发管理平台
【推荐】程序员问答平台,解决您开发中遇到的技术难题

相关博文:
· 2,Python常用库之二:Pandas
· 数据处理之pandas库
· pandas常用
· python之pandas数据筛选和csv操作
· 数据清理,预处理pandasdataframe操作技巧总结

最新新闻
· 剩1/279都能再生的魔幻动物:切断再生一时爽,一直切一直爽
· 德国对脸书开出200万罚单:因处理网络仇恨言论不力
· 新陈代谢是如何开始的?
· 教育部:已约谈有关搜索引擎网站 整治“志愿填报指导”
· 万字长文:无论何时何地,亚马逊都在“注视”着你
» 更多新闻...

Pandas库常用函数和操作相关推荐

  1. 总结(5)--- Numpy和Pandas库常用函数

    二.常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数据进行快速运算的标准 ...

  2. Python之Pandas库常用函数大全(含注释)

    前言:本博文摘抄自中国慕课大学上的课程<Python数据分析与展示>,推荐刚入门的同学去学习,这是非常好的入门视频. 继续一个新的库,Pandas库.Pandas库围绕Series类型和D ...

  3. python重要的第三方库pandas模块常用函数解析之DataFrame

    pandas模块常用函数解析之DataFrame 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 打开浏览器 ...

  4. 【Pandas库】(5) 索引操作--增、删

    各位同学好,今天我向大家介绍一下pandas库中的索引操作--增.删. 1. 增加 1.1 对series操作 方法一:在原有数据上增加,改变原有数据. Series名[新标签名] = 新标签名对应的 ...

  5. python math库常用函数_Python math库常用函数

    math库常用函数及举例: 注意:使用math库前,用import导入该库 >>> import math 取大于等于x的最小的整数值,如果x是一个整数,则返回x >>& ...

  6. C++库常用函数一览表

    本文中提到的函数库有:<string> <cctype> <algorithm> <cmath> <cstdlib> <iomanip ...

  7. PHP访问mysql的常用函数,PHP操作MySQL数据库常用函数

    PHP操作MySQL数据库常用函数 php操作mysql数据库,俗称天龙八步: 第一步:连接数据库 第二步:判断连接错误 第三步:选择数据库 第四步:设置字符集 第五步:准备SQL语句 第六步:执行并 ...

  8. Python中numpy.linalg库常用函数

    Python中numpy.linalg库常用函数 numpy.linalg Python中numpy.linalg库常用函数 简单记录所遇到的numpy库内置函数 矩阵与向量积 ①np.linalg. ...

  9. Matplotlib库常用函数总结

    Matplotlib库常用函数总结 Matplotlib库由各种可视化类构成,内部结构复杂. matplotlib.pyplot是绘制各类可视化图形的命令字库,相当于快捷方式. pyplot的绘图区域 ...

最新文章

  1. 日常生活小技巧 -- U盘拷贝时提示文件过大问题
  2. android 6.0 api 管理,Android 6.0(API23)权限申请问题
  3. Java 算法 开心的金明
  4. 地震勘探专业词汇(3)地震波动力学
  5. Java集合基础知识总结
  6. 征服Java面试官!mysql索引树结构
  7. 浏览器崩溃_安装谷歌浏览器后打开网页时出现页面崩溃的解决办法
  8. python multiprocess queue_Python:Multiprocessing Queue.put不适用于半大数...
  9. 群晖 上传 源文件不存在_群晖NAS配多大容量硬盘合适?
  10. 计算机打印怎样添加PDF格式,电脑添加PDF打印机后如何将Excel打印成PDF
  11. 2022年了,微信透明头像怎么设置?不多说,安排
  12. 云桌面服务器+搭建,搭建自己的云桌面服务器
  13. 【生活中的逻辑谬误】对人不对事和两难陷阱
  14. 疾病研究:LEMS和先天性肌无力患者指南
  15. 计算机网络CiscoPacket Tracer实验
  16. 关于flux里面的->的解释
  17. 磁盘调度策略 c语言实现(操作系统课程设计,书p320)
  18. 编程php计算行李托运费_飞机行李箱怎么算托运费?
  19. 微信小程序动态添加Class
  20. 人工智能在游戏领域的应用

热门文章

  1. 2021-2027年中国手机天线行业竞争格局分析及发展趋势预测报告
  2. 2022-2028年中国交通建设PPP模式深度分析及发展战略研究报告(全卷)
  3. C++ OJ 中多行数据输入(大小写转换、通过移位运算实现2的n次方、多组输入,每行输入数量不一样)
  4. NLP --- 条件随机场CRF详解 重点 特征函数 转移矩阵
  5. 合肥工业大学—SQL Server数据库实验七:数据查询
  6. 在Cuda上部署量化模型
  7. 自动驾驶QNX,Linux,Autosar概述
  8. CodeGen处理Synergy方法目录
  9. 2021年大数据Spark(三十三):SparkSQL分布式SQL引擎
  10. Linux环境变量说明与配置