1. DataFrame 处理缺失值  dropna()

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

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

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

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

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

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

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

value_counts()方法统计数组或序列所有元素出现次数,对某一列统计可以直接用df.column_name.value_counts()

3. 去重  drop_duplicates()

  1. df.drop_duplicates(['name'], keep='last', inplace=True)
  2. """
  3. keep : {‘first’, ‘last’, False}, default ‘first’
  4. first : Drop duplicates except for the first occurrence.
  5. last : Drop duplicates except for the last occurrence.
  6. False : Drop all duplicates.
  7. """

4. 拼接

(1) 拼接列 merge()

  1. result = pd.merge(left, right, on='name', how='inner')
  2. """
  3. 其它参数:
  4. 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)
  5.  
  6. Examples
  7. >>> A >>> B
  8. lkey value rkey value
  9. 0 foo 1 0 foo 5
  10. 1 bar 2 1 bar 6
  11. 2 baz 3 2 qux 7
  12. 3 foo 4 3 bar 8
  13.  
  14. >>> A.merge(B, left_on='lkey', right_on='rkey', how='outer')
  15. lkey value_x rkey value_y
  16. 0 foo 1 foo 5
  17. 1 foo 4 foo 5
  18. 2 bar 2 bar 6
  19. 3 bar 2 bar 8
  20. 4 baz 3 NaN NaN
  21. 5 NaN NaN qux 7
  22. """

其它参考:Merge, join, and concatenate

(2) 拼接行

  1. def concat_by_row(data_dir, fout):
  2. dfs = []
  3. for filename in os.listdir(data_dir):
  4. dfs.append(pd.read_excel(os.path.join(data_dir, filename)))
  5. print(dfs[-1].shape, filename)
  6. df = pd.concat(dfs, axis=0, ignore_index=True) # axis=0按行拼接;axis=1按列拼接
  7. print(df.shape)
  8. df.to_excel(fout, index=False)

5. 找出在某一特定维度为空值的所有行

  1. bool_arr = df.name.notnull()
  2. print bool_arr.value_counts()
  3. for idx, value in bool_arr.iteritems():
  4. if not value:
  5. print '\n', idx, value
  6. print df.iloc[idx]

6. 指定dataframe的维度及顺序; 保存数据csv文件

  1. res = {'name':[], 'buss':[], 'label':[]}
  2. with codecs.open(fname, encoding='utf8') as fr:
  3. for idx, line in enumerate(fr):
  4. item = json.loads(line)
  5. res['name'].append(item['name'])
  6. res['buss'].append(item['buss'])
  7. res['label'].append(item['label'])
  8. df = pd.DataFrame(res, columns=['name', 'buss', 'label'])
  9. df.to_csv('data/xxx.csv', index=False, encoding='utf-8')

7. 保存到文件

7.1 读写excel/csv格式文件

  1. import pandas as pd
  2.  
  3. def dataframe_read_and_write(fin, fout): # 读取fin文件,添加一列"新应答"
  4. df = pd.read_excel(fin)
  5. # df = read_csv(fin, encoding='utf-8')
  6. print df.head()
  7.  
  8. fields = [u"序号", u"问题描述", u"原始应答", u"新应答"]
  9. data_out = defaultdict(list)
  10.  
  11. for idx, row in df.iterrows():
  12. try:
  13. row = row.to_dict()
  14. new_answer = "xxxxxx"
  15. for field in fields[:-1]:
  16. data_out[field].append(row[field])
  17. data_out[fields[-1]].append(new_answer)
  18. except Exception as error:
  19. print "Error line", idx, error
  20.  
  21. df_out = pd.DataFrame(data_out, columns=fields)
  22. df_out.to_excel(fout, sheet_name="Sheet1", index=False, header=True)
  23. # df_out.to_csv(fout, index=False, encoding="utf-8")
  24.  
  25. if __name__ == '__main__':
  26. dataframe_read_and_write(fin="data/tmp.xlsx", fout="data/tmp_out.xlsx")

7.2 将多张DataFrame表写入到同一个excel文件的不同sheet中

  1. import pandas as pd
  2. writer = pd.ExcelWriter('foo.xlsx')
  3. df.to_excel(writer, 'Data 0')
  4. df.to_excel(writer, 'Data 1')
  5. writer.save()

7.3 向一个已经存在的excel文件中写入一张新sheet;如果文件不存在则创建一个新文件再写入

  1. import pandas
  2. from openpyxl import load_workbook
  3.  
  4. def add_new_sheet(df, fout, sheet_name='Sheet1', columns=None):
  5. if fout and os.path.exists(fout):
  6. book = load_workbook(fout)
  7. writer = pd.ExcelWriter(fout, engine='openpyxl')
  8. writer.book = book
  9. writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
  10. else:
  11. writer = pd.ExcelWriter(fout)
  12. df.to_excel(writer, sheet_name=sheet_name, columns=columns, index=False)
  13. writer.save()
  14.  
  15. 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

  1. import xlrd
  2.  
  3. workbook = xlrd.open_workbook(fin)
  4. for sheet in workbook.sheets():
  5. df = pd.read_excel(fin, sheet_name=sheet.name, index_col=None)

8. 排序

  1. def sort_dataframe(df, fields_to_sort, fout=None):
  2. df = df.sort_values(by=fields_to_sort, ascending=True)
  3. if fout:
  4. df.to_excel(fout, index=False)
  5. return df
  6.  
  7. df = pd.read_excel(data_file)
  8. sort_dataframe(df, fields_to_sort=["column_A", "column_B"], fout=data_file)
  9.  
  10. df = pd.read_excel(data_file) # note: index改变,需要从文件重新读取,才会是有序的,后面遍历df的时候才不会出问题
  11. print(df.head(10))

9. 轴标签重命名 df.rename()(列重命名、行index重命名)

  1. >>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
  2. >>> df.rename(index=str, columns={"A": "a", "B": "c"})
  3. a c
  4. 0 1 4
  5. 1 2 5
  6. 2 3 6
  7.  
  8. >>> df.rename(index=str, columns={"A": "a", "C": "c"})
  9. a B
  10. 0 1 4
  11. 1 2 5
  12. 2 3 6
  13.  
  14. Using axis-style parameters
  15.  
  16. >>> df.rename(str.lower, axis='columns')
  17. a b
  18. 0 1 4
  19. 1 2 5
  20. 2 3 6
  21.  
  22. >>> df.rename({1: 2, 2: 4}, axis='index')
  23. A B
  24. 0 1 4
  25. 2 2 5
  26. 4 3 6

参数说明:

  1. Signature: df.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None)
  2. Docstring:
  3. Alter axes labels.
  4.  
  5. Function / dict values must be unique (1-to-1). Labels not contained in
  6. a dict / Series will be left as-is. Extra labels listed don't throw an
  7. error.
  8.  
  9. See the :ref:`user guide <basics.rename>` for more.
  10.  
  11. Parameters
  12. ----------
  13. mapper, index, columns : dict-like or function, optional
  14. dict-like or functions transformations to apply to
  15. that axis' values. Use either ``mapper`` and ``axis`` to
  16. specify the axis to target with ``mapper``, or ``index`` and
  17. ``columns``.
  18. axis : int or str, optional
  19. Axis to target with ``mapper``. Can be either the axis name
  20. ('index', 'columns') or number (0, 1). The default is 'index'.
  21. copy : boolean, default True
  22. Also copy underlying data
  23. inplace : boolean, default False
  24. Whether to return a new DataFrame. If True then value of copy is
  25. ignored.
  26. level : int or level name, default None
  27. In case of a MultiIndex, only rename labels in the specified
  28. level.
  29.  
  30. Returns
  31. -------
  32. renamed : DataFrame
  33.  
  34. See Also
  35. --------
  36. pandas.DataFrame.rename_axis

df.rename()参数说明

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

10.1 loc

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

  1. # df.loc[index, column_name],选取指定行和列的数据
  2. df.loc[0,'name'] # 'Snow'
  3. df.loc[0:2, ['name','age']] #选取第0行到第2行,name列和age列的数据, 注意这里的行选取是包含下标的。
  4. df.loc[[2,3],['name','age']] #选取指定的第2行和第3行,name和age列的数据
  5. df.loc[df['gender']=='M','name'] #选取gender列是M,name列的数据
  6. 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]

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

更多参考:

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

11. 判断某个cell是否为空

  1. if str(line["col_a"]).strip() == "nan":
  2. pass 

12. Dataframe值替换

  1. df["col_a"] = df["col_a"].replace({"b": "C", "e": "G"})

更多参考:https://jingyan.baidu.com/article/454316ab4d0e64f7a6c03a41.html

13. Dataframe筛选数据

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

更多参考:https://jingyan.baidu.com/article/0eb457e508b6d303f0a90572.html

14. 其它常用操作

  1. # df = pd.read_csv("../../data/data_part1.txt", sep="$")
  2. df = pd.read_csv("data/data_part1.csv", low_memory=False)
  3.  
  4. # 数据概览
  5. df.info()
  6. df.describe() # ==> 只显示float型维度的[count, mean, std, min]等统计信息, 例如0108, 3816, 2453, 0112, 2428, 2304
  7.  
  8. # 数据查看
  9. df.head(n=5) # 查看开头几行, 默认n=5
  10. df.tail(n=5) # 查看末尾几行, 默认n=5
  11. df.shape # 查看行列维度
  12. df.columns # 查看列名和列数
  13. df.dtypes # 查看数据类型 ==> 可以看到哪些维度的数值是object型/float型
  14. df[""].hist() # 查看变量分布
  15. df[""].unique() # 查看有哪些取值
  16. df[""].value_counts() # 查看这一列的值统计
  17.  
  18. # 缺失值统计
  19. df.isnull().sum() # 查看每一列缺失值情况
  20. df["n_null"] = df.isnull().sum(axis=1) # 查看每一行缺失值情况
  21.  
  22. # 缺失值填充
  23. mode_df = df.fillna(df.mode().iloc[0], inplace=True) # 用众数填充
  24. median_df = df.fillna(df.median()) # 用中位数填充
  25. df[""][df.vid.isnull()] = "" # 对某一列填充

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"

  1. writer = pd.ExcelWriter(fout, engine="xlsxwriter", options={'strings_to_urls': False})
  2. df.to_excel(writer, index=False)
  3. writer.save()

参考:

https://blog.csdn.net/wangquannuaa/article/details/43988719

https://blog.csdn.net/wangquannuaa/article/details/43984095

Pandas库常用函数和操作的更多相关文章

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

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

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

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

  3. Python math库常用函数

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

  4. pandas模块常用函数解析之Series(详解)

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

  5. Matplotlib库常用函数大全

    Python之Matplotlib库常用函数大全(含注释) plt.savefig(‘test’, dpi = 600) :将绘制的图画保存成png格式,命名为 test plt.ylabel(‘Gr ...

  6. Python之Numpy库常用函数大全(含注释)

    前言:最近学习Python,才发现原来python里的各种库才是大头! 于是乎找了学习资料对Numpy库常用的函数进行总结,并带了注释.在这里分享给大家,对于库的学习,还是用到时候再查,没必要死记硬背 ...

  7. Python之Numpy库常用函数大全(含注释)(转)

    为收藏学习,特转载:https://blog.csdn.net/u011995719/article/details/71080987 前言:最近学习Python,才发现原来python里的各种库才是 ...

  8. pandas的常用函数

    1.DataFrame的常用函数: (1)np.abs(frame) 绝对值, (2)apply function, lambda f= lambda x: x.max()-x.min(),frame ...

  9. SqlServer存储过程中常用函数及操作

    1.case语句 用于选择语句 SELECT ProductNumber, Category = CASE ProductLine WHEN 'R' THEN 'Road' WHEN 'M' THEN ...

随机推荐

  1. Qt大小端

    转:http://blog.csdn.net/usownh/article/details/42614185 大端模式和小端模式是计算机中经常涉及到的两种字节序,也有大端对齐.小端对齐.大尾.小尾等叫 ...

  2. POJ-2479 Maximum sum(动态规划)

    最大子序列和的加强版. 借助最大子序列和,分别正向和反向遍历一遍得到left和right数组(具体含义见代码注释) 然后再对left和right数组进行修正,保存从对应元素起向左或向右的最大连续和. ...

  3. Spring mvc异步处理

    基于Servlet3.0的异步处理,springmvc的异步处理 控制器返回callable, spring mvc异步处理,将callable提交到TaskExecutor  使用一个隔离线程进行执 ...

  4. oracle添加用户并给予管理员身份登陆

    sqlplus / as sysdba;--超级管理员sys登陆 show user;--显示当前用户 conn system/admin;--切换用户 CREATE user admin ident ...

  5. Win10 initluictrl failed问题

    问题描述 启动win10之后,所有的软件.快捷方式无法访问,双击之后没有响应但联网正常. 解决方法 win键+S弹出选项框,选择cmd(管理员). 键入命令:netsh winsock reset c ...

  6. HDU5299 圆的扫描线 && 树上删边博弈

    HDU5299 圆的扫描线 && 树上删边博弈 标签(空格分隔): 未分类 给出若干个圆,可以互相嵌套但不相交或相切. 每次删去一个圆和它内部的圆,进行博弈,问谁赢. 分成两部分.首先 ...

  7. 那些年java MD5加密字符编码的坑

    相信做过MD5加密的童鞋都遇到过字符编码的坑,一般加密出来的结果和其他人不一样都是字符编码不一致导致的,比如类文件的字符编码.浏览器的字符编码等和对方不一致,所以就需要转码统一字符. 以下是笔者转码过 ...

  8. Maven 一段时间知识小结2

    父 Pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>s ...

  9. RabbitMQ :常用命令与图形管理及用户权限

    RabbitMQ 安装 安装 RabbitMQ 前要先安装 Erlang,可以去 Erlang 官网下载,接着去 RabbitMQ 官网下载安装包,解压缩即可 Mac 用户可以通过 HomeBrew ...

  10. MongoDB 3.4 分片 由副本集组成

    要在真实环境中实现MongoDB分片至少需要四台服务器做分片集群服务器,其中包含两个Shard分片副本集(每个包含两个副本节点及一个仲裁节点).一个配置副本集(三个副本节点,配置不需要仲裁节点),其中 ...