DataFrame使用总结1(超实用):

1. 合并两个表

  1. frame = [df1, df2]
  2. df = pd.concat(frame)
  1. res = pd.merge(df, df1, on=['key', 'key1'], how='inner')
  2. res = pd.merge(df, df1, left_on=['key'], left_on=['key1'], how='inner')

合并表的操作(Merge, join, and concatenate)

http://pandas.pydata.org/pandas-docs/stable/merging.html

2. split() 和 strip() 函数

strip是删除的意思,主要是删除开头和结尾处的字符串

rm 表示要删除的字符串

  • str.strip(rm) 表示删除开头和结尾,处于rm序列中的字符(需要正确理解)
  • str.lstrip(rm) 表示删除开头,处于rm序列中的字符(需要正确理解)
  • str.rstrip(rm) 表示删除结尾,处于rm序列中的字符(需要正确理解)

当rm为空时,默认删除空白符,包含('\n', '\r', '\t', ' ')

  1. a = ' 1223ss!# '
  2. a = a.strip()
  3. a
  4. >>> '1223ss!#'
  5. b = a.strip('12') # attention:是将开头和结尾处包含 ‘1’字符和含有‘2’字符的全部删掉
  6. >>> '3ss!#'
  7. b = a.strip('21') # attentionn: 和顺序无关
  8. >>> '3ss!#'

split是分割的意思

  1. a = ' 1223ss!# pp '
  2. b = a.split('#')
  3. b
  4. >>> [' 1223ss!', ' pp ']
  5. # 如果我们想截取到ss,可以这样操作
  6. b = a.split('!')[0].split('3')[1] # 多种方法都可以取到,这里只是讲解split的用法
  7. b
  8. >>> 'ss'

3. list 转DataFrame

  1. import pandas as pd
  2. l = [[1,2,3],[1,5,4],[2,4,2]]
  3. pd.DataFrame(l, columns=['lie_A','lie_B','lie_C'])
  4. >>> lie_A lie_B lie_C
  5. 0 1 2 3
  6. 1 1 5 4
  7. 2 2 4 2

4. 读取和存储表

常用的两种表是csv和excel

读取表为DataFrame结构

  1. table1 = pd.DataFrame(pd.read_excel('sss.xlsx'))
  2. table2 = pd.read_csv('sss.csv')

存储表

  1. table1.to_excel('sss.xlsx')
  2. table2.to_csv('sss.csv', encoding='utf-8')

csv表是以 ‘,’ 为分割符,所以最好保存为csv格式

5. 将DataFrame转化为array,list

  1. # 将table(DataFrame)的lie
  2. table1 = np.array(table['lie']) # 转化为array
  3. table2 = table1.tolist() # 转化为list
  4. # 将table(DataFrame)转化为list
  5. table1 = np.array(table) # 转化为array
  6. table2 = table1.tolist() # 转化为list

6. DataFrame中最好不要用循环,用apply,如果只能用循环处理,转化为array或者list再做处理

apply 的具体使用方法:http://www.cnblogs.com/gaoss/p/7657044.html

  1. import pandas as pd
  2. table1
  3. >>> index lie0
  4. 0 1 kkk
  5. 1 2 sss
  6. 2 3 ddd
  7. 3 4 ppp
  8. def tem(x):
  9. return x+'_hello'
  10. table1.lie0 = table1.lie0.apply(tem)
  11. table1
  12. >>> index lie0
  13. 0 1 kkk_hello
  14. 1 2 sss_hello
  15. 2 3 ddd_hello
  16. 3 4 ppp_hello

7. 对DataFrame重建索引

  1. table = table.reset_index()

8. 对DataFrame删除列或者增加列

删除列:

  1. table = table.drop(['lie0', 'lie1'], axis=1)

增加列:

  1. table['new_lie'] = '' # 新增一个新列,列名为new_lie,值为空
  2. table['new_lie'] = table['lie0'].astype('str') + table['lie1'].astype('str') # 将lie0和lie1的值赋给new_lie

9. 筛选数据

  1. table = table.loc[table['lie0'] > 0]

将table表中lie0 列大于0的数据筛选出来,其他列也会跟随该列变化

10. 强制类型转换

例如 ‘lie0’ 列数据为int,需要将其转化为str,就需要用到强制类型转换

  1. table['sku_division_code'].astype('int')

11. 对某一列列名进行重命名

将 lie0 替换为 lie1

  1. table.rename(columns={'lie0': 'lie1'}, inplace=True)

12. get_dummies(one_hot 编码)

  1. import pandas as pd
  2. table1 = pd.DataFrame(pd.read_excel('sss.xlsx'))
  3. table1
  4. >>> index lie0
  5. 0 1 kkk
  6. 1 2 sss
  7. 2 3 ddd
  8. 3 4 ppp
  9. pd.get_dummies(table1, columns=['lie0'])
  10. >>> index lie0_ddd lie0_kkk lie0_ppp lie0_sss
  11. 0 1 0 1 0 0
  12. 1 2 0 0 0 1
  13. 2 3 1 0 0 0
  14. 3 4 0 0 1 0

13 处理日期

  1. 求两个日期中间的所有日期
  1. a = '2017-08-04'
  2. b = '2017-09-01'
  3. rng = pd.date_range(a,b)
  4. rng
  5. >>> DatetimeIndex(['2017-08-04', '2017-08-05', '2017-08-06', '2017-08-07',
  6. '2017-08-08', '2017-08-09', '2017-08-10', '2017-08-11',
  7. '2017-08-12', '2017-08-13', '2017-08-14', '2017-08-15',
  8. '2017-08-16', '2017-08-17', '2017-08-18', '2017-08-19',
  9. '2017-08-20', '2017-08-21', '2017-08-22', '2017-08-23',
  10. '2017-08-24', '2017-08-25', '2017-08-26', '2017-08-27',
  11. '2017-08-28', '2017-08-29', '2017-08-30', '2017-08-31',
  12. '2017-09-01'],
  13. dtype='datetime64[ns]', freq='D')
  14. len(rng)
  15. >>> 29
  16. rng[1]
  17. >>> Timestamp('2017-08-05 00:00:00', freq='D')
  1. 将str转化为日期格式
  1. import pandas as pd
  2. from datetime import *
  3. a = '2017-08-04'
  4. type(a)
  5. >>> <type 'str'>
  6. a = datetime.strptime(str(a), '%Y-%m-%d')
  7. type(a)
  8. >>> datetime.datetime
  1. 判断一天是星期几
  1. a.weekday()
  2. >>> 4 # 0到6代表从星期一到星期日
  1. 计算两个时间之间相差多少秒
  1. a = '08:10:20'
  2. b = '15:34:43'
  3. time_a = datetime.strptime(a, '%H:%M:%S')
  4. time_b = datetime.strptime(b, '%H:%M:%S')
  5. total = (time_b - time_a).seconds
  6. total
  7. >>> 26663

14. list 的常见操作

删除 与 增加元素

  1. lie = ['1','2','kk','3','m']
  2. lie.remove('kk')
  3. lie
  4. >>> ['1', '2', '3', 'm']
  5. lie.insert(0, 'xx')
  6. lie
  7. >>> ['xx', '1', '2', '3', 'm']
  8. lie.append('ten')
  9. lie
  10. >>> ['xx', '1', '2', '3', 'm', 'ten']
  11. if 'xx' in lie: # 判断xx在lie这个list中
  12. print('right')
  13. >>> right

15. 空值的使用

  1. table1
  2. >>> index lie0 lie1
  3. 0 1 kkk p1
  4. 1 2 sss p2
  5. 2 3 NaN p3
  6. 3 4 ppp p4
  7. table1[pd.isnull(table1.lie0)] = 'mmm'
  8. table1
  9. >>> index lie0 lie1
  10. 0 1 kkk p1
  11. 1 2 sss p2
  12. 2 3 mmm p3
  13. 3 4 ppp p4

16 将表头(列名)取出来,为list

  1. lieming = list(table1.columns.values)
  2. >>> [u'index', u'lie0', u'lie1']
  3. lieming = table1.columns.values.tolist()
  4. >>> [u'index', u'lie0', u'lie1']

17. zfill()

  1. a = '301' # 将字符串填充为4位
  2. a.zfill(4)
  3. >>> '0301'

18. stack && unstack

  1. >>>
  2. col1 col2
  3. a 1 2
  4. b 1 2
  5. stack = df.stack()
  6. a col1 1
  7. col2 2
  8. b col1 1
  9. col2 2
  10. stack.unstack()
  11. col1 col2
  12. a 1 2
  13. b 1 2

19. 其他

  1. table1.shape
  2. >>>(4,3)
  3. x = table1.shape[0]
  4. y = table1.shape[1]
  5. x
  6. >>> 4
  7. y
  8. >>> 3
  9. table1.describe() # 显示基础信息
  10. >>> index
  11. count 4.000000
  12. mean 2.500000
  13. std 1.290994
  14. min 1.000000
  15. 25% 1.750000
  16. 50% 2.500000
  17. 75% 3.250000
  18. max 4.000000

DataFrame使用总结1(超实用)的更多相关文章

  1. Spark的DataFrame的窗口函数使用

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 SparkSQL这块儿从1.4开始支持了很多的窗口分析函数,像row_number这些,平时写程 ...

  2. 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作

    一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...

  3. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  4. pandas.DataFrame对行和列求和及添加新行和列

    导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFra ...

  5. pandas.DataFrame排除特定行

    使用Python进行数据分析时,经常要使用到的一个数据结构就是pandas的DataFrame 如果我们想要像Excel的筛选那样,只要其中的一行或某几行,可以使用isin()方法,将需要的行的值以列 ...

  6. Spark SQL 之 DataFrame

    Spark SQL 之 DataFrame 转载请注明出处:http://www.cnblogs.com/BYRans/ 概述(Overview) Spark SQL是Spark的一个组件,用于结构化 ...

  7. spark dataframe 类型转换

    读一张表,对其进行二值化特征转换.可以二值化要求输入类型必须double类型,类型怎么转换呢? 直接利用spark column 就可以进行转换: DataFrame dataset = hive.s ...

  8. 我们为什么要看《超实用的Node.JS代码段》

    不知道自己Node.JS水平如何?看这张图 如果一半以上的你都不会,必须看这本书,一线工程师用代码和功能页面来告诉你每一个技巧点. 都会一点,但不知道如何检验自己,看看本书提供的面试题: 1.     ...

  9. 数据分析(9):DataFrame介绍

    DataFrame 表格型的数据结构 创建DataFrame 可以通过传入dict的方式,DataFrame会自动加上索引,并且列会有序排列 data = {'state':['a', 'b', 'c ...

随机推荐

  1. 反射结合xml简单的模拟spring创建bean

    框架最底层其实就是通过反射实现的,就像spring,当你配置各种各样的bean时都是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,这儿写一个简单的 ...

  2. ThinkPHP中:用户登录权限验证类

    使用CommonAction.class.php公共类,统一判断用户是否登录 <?php //后台登录页 Class CommonAction extends Action{ //后台登录页面 ...

  3. apollo实现c#与android消息推送(四)

    4  Android代码只是为了实现功能,比较简单,就只是贴出来 package com.myapps.mqtttest; import java.util.concurrent.Executors; ...

  4. 渣渣学QT

    初学QT,自己的一些小总结,错误之处,望大神指点一二: 1,添加资源文件时想应用在界面的背景,但是发现用不了,后来才知道是没有"构建"?应该是要在构建之后才将所添加的资源文件真正的 ...

  5. Struts 关联DTD 文件

    Struts 的xml 文件在Eclipse 中  默认是不会有提示的. 但是我们可以关联DTD 文件, 这样子就可以出现如下的struts   提示了 1. 首先得先确保自己有Struts2 的Sr ...

  6. PE文件格式详解,第二讲,NT头文件格式,以及文件头格式

    PE文件格式详解,第二讲,NT头文件格式,以及文件头格式 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) PS:本篇博客 ...

  7. zoj1494 暴力模拟 简单数学问题

    Climbing Worm Time Limit: 2 Seconds      Memory Limit:65536 KB An inch worm is at the bottom of a we ...

  8. ajax和jsonp使用总结

    前言:ajax和jsonp可以与后台通信,获取数据和信息,但是又不用刷新整个页面,实现页面的局部刷新. 一.ajax 定义:一种发送http请求与后台进行异步通讯的技术. 原理:实例化xmlhttp对 ...

  9. c#中字节数组byte[]、图片image、流stream,字符串string、内存流MemoryStream、文件file,之间的转换

    字节数组byte[]与图片image之间的转化 字节数组转换成图片 public static Image byte2img(byte[] buffer) { MemoryStream ms = ne ...

  10. nginx URL重写

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...