DataFrame使用总结1(超实用)
DataFrame使用总结1(超实用):
1. 合并两个表
frame = [df1, df2]
df = pd.concat(frame)
res = pd.merge(df, df1, on=['key', 'key1'], how='inner')
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', ' ')
a = ' 1223ss!# '
a = a.strip()
a
>>> '1223ss!#'
b = a.strip('12') # attention:是将开头和结尾处包含 ‘1’字符和含有‘2’字符的全部删掉
>>> '3ss!#'
b = a.strip('21') # attentionn: 和顺序无关
>>> '3ss!#'
split是分割的意思
a = ' 1223ss!# pp '
b = a.split('#')
b
>>> [' 1223ss!', ' pp ']
# 如果我们想截取到ss,可以这样操作
b = a.split('!')[0].split('3')[1] # 多种方法都可以取到,这里只是讲解split的用法
b
>>> 'ss'
3. list 转DataFrame
import pandas as pd
l = [[1,2,3],[1,5,4],[2,4,2]]
pd.DataFrame(l, columns=['lie_A','lie_B','lie_C'])
>>> lie_A lie_B lie_C
0 1 2 3
1 1 5 4
2 2 4 2
4. 读取和存储表
常用的两种表是csv和excel
读取表为DataFrame结构
table1 = pd.DataFrame(pd.read_excel('sss.xlsx'))
table2 = pd.read_csv('sss.csv')
存储表
table1.to_excel('sss.xlsx')
table2.to_csv('sss.csv', encoding='utf-8')
csv表是以 ‘,’ 为分割符,所以最好保存为csv格式
5. 将DataFrame转化为array,list
# 将table(DataFrame)的lie
table1 = np.array(table['lie']) # 转化为array
table2 = table1.tolist() # 转化为list
# 将table(DataFrame)转化为list
table1 = np.array(table) # 转化为array
table2 = table1.tolist() # 转化为list
6. DataFrame中最好不要用循环,用apply,如果只能用循环处理,转化为array或者list再做处理
apply 的具体使用方法:http://www.cnblogs.com/gaoss/p/7657044.html
import pandas as pd
table1
>>> index lie0
0 1 kkk
1 2 sss
2 3 ddd
3 4 ppp
def tem(x):
return x+'_hello'
table1.lie0 = table1.lie0.apply(tem)
table1
>>> index lie0
0 1 kkk_hello
1 2 sss_hello
2 3 ddd_hello
3 4 ppp_hello
7. 对DataFrame重建索引
table = table.reset_index()
8. 对DataFrame删除列或者增加列
删除列:
table = table.drop(['lie0', 'lie1'], axis=1)
增加列:
table['new_lie'] = '' # 新增一个新列,列名为new_lie,值为空
table['new_lie'] = table['lie0'].astype('str') + table['lie1'].astype('str') # 将lie0和lie1的值赋给new_lie
9. 筛选数据
table = table.loc[table['lie0'] > 0]
将table表中lie0 列大于0的数据筛选出来,其他列也会跟随该列变化
10. 强制类型转换
例如 ‘lie0’ 列数据为int,需要将其转化为str,就需要用到强制类型转换
table['sku_division_code'].astype('int')
11. 对某一列列名进行重命名
将 lie0 替换为 lie1
table.rename(columns={'lie0': 'lie1'}, inplace=True)
12. get_dummies(one_hot 编码)
import pandas as pd
table1 = pd.DataFrame(pd.read_excel('sss.xlsx'))
table1
>>> index lie0
0 1 kkk
1 2 sss
2 3 ddd
3 4 ppp
pd.get_dummies(table1, columns=['lie0'])
>>> index lie0_ddd lie0_kkk lie0_ppp lie0_sss
0 1 0 1 0 0
1 2 0 0 0 1
2 3 1 0 0 0
3 4 0 0 1 0
13 处理日期
- 求两个日期中间的所有日期
a = '2017-08-04'
b = '2017-09-01'
rng = pd.date_range(a,b)
rng
>>> DatetimeIndex(['2017-08-04', '2017-08-05', '2017-08-06', '2017-08-07',
'2017-08-08', '2017-08-09', '2017-08-10', '2017-08-11',
'2017-08-12', '2017-08-13', '2017-08-14', '2017-08-15',
'2017-08-16', '2017-08-17', '2017-08-18', '2017-08-19',
'2017-08-20', '2017-08-21', '2017-08-22', '2017-08-23',
'2017-08-24', '2017-08-25', '2017-08-26', '2017-08-27',
'2017-08-28', '2017-08-29', '2017-08-30', '2017-08-31',
'2017-09-01'],
dtype='datetime64[ns]', freq='D')
len(rng)
>>> 29
rng[1]
>>> Timestamp('2017-08-05 00:00:00', freq='D')
- 将str转化为日期格式
import pandas as pd
from datetime import *
a = '2017-08-04'
type(a)
>>> <type 'str'>
a = datetime.strptime(str(a), '%Y-%m-%d')
type(a)
>>> datetime.datetime
- 判断一天是星期几
a.weekday()
>>> 4 # 0到6代表从星期一到星期日
- 计算两个时间之间相差多少秒
a = '08:10:20'
b = '15:34:43'
time_a = datetime.strptime(a, '%H:%M:%S')
time_b = datetime.strptime(b, '%H:%M:%S')
total = (time_b - time_a).seconds
total
>>> 26663
14. list 的常见操作
删除 与 增加元素
lie = ['1','2','kk','3','m']
lie.remove('kk')
lie
>>> ['1', '2', '3', 'm']
lie.insert(0, 'xx')
lie
>>> ['xx', '1', '2', '3', 'm']
lie.append('ten')
lie
>>> ['xx', '1', '2', '3', 'm', 'ten']
if 'xx' in lie: # 判断xx在lie这个list中
print('right')
>>> right
15. 空值的使用
table1
>>> index lie0 lie1
0 1 kkk p1
1 2 sss p2
2 3 NaN p3
3 4 ppp p4
table1[pd.isnull(table1.lie0)] = 'mmm'
table1
>>> index lie0 lie1
0 1 kkk p1
1 2 sss p2
2 3 mmm p3
3 4 ppp p4
16 将表头(列名)取出来,为list
lieming = list(table1.columns.values)
>>> [u'index', u'lie0', u'lie1']
lieming = table1.columns.values.tolist()
>>> [u'index', u'lie0', u'lie1']
17. zfill()
a = '301' # 将字符串填充为4位
a.zfill(4)
>>> '0301'
18. stack && unstack
>>>
col1 col2
a 1 2
b 1 2
stack = df.stack()
a col1 1
col2 2
b col1 1
col2 2
stack.unstack()
col1 col2
a 1 2
b 1 2
19. 其他
table1.shape
>>>(4,3)
x = table1.shape[0]
y = table1.shape[1]
x
>>> 4
y
>>> 3
table1.describe() # 显示基础信息
>>> index
count 4.000000
mean 2.500000
std 1.290994
min 1.000000
25% 1.750000
50% 2.500000
75% 3.250000
max 4.000000
DataFrame使用总结1(超实用)的更多相关文章
- Spark的DataFrame的窗口函数使用
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 SparkSQL这块儿从1.4开始支持了很多的窗口分析函数,像row_number这些,平时写程 ...
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
一.reindex() 方法:重新索引 针对 Series 重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- pandas.DataFrame对行和列求和及添加新行和列
导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFra ...
- pandas.DataFrame排除特定行
使用Python进行数据分析时,经常要使用到的一个数据结构就是pandas的DataFrame 如果我们想要像Excel的筛选那样,只要其中的一行或某几行,可以使用isin()方法,将需要的行的值以列 ...
- Spark SQL 之 DataFrame
Spark SQL 之 DataFrame 转载请注明出处:http://www.cnblogs.com/BYRans/ 概述(Overview) Spark SQL是Spark的一个组件,用于结构化 ...
- spark dataframe 类型转换
读一张表,对其进行二值化特征转换.可以二值化要求输入类型必须double类型,类型怎么转换呢? 直接利用spark column 就可以进行转换: DataFrame dataset = hive.s ...
- 我们为什么要看《超实用的Node.JS代码段》
不知道自己Node.JS水平如何?看这张图 如果一半以上的你都不会,必须看这本书,一线工程师用代码和功能页面来告诉你每一个技巧点. 都会一点,但不知道如何检验自己,看看本书提供的面试题: 1. ...
- 数据分析(9):DataFrame介绍
DataFrame 表格型的数据结构 创建DataFrame 可以通过传入dict的方式,DataFrame会自动加上索引,并且列会有序排列 data = {'state':['a', 'b', 'c ...
随机推荐
- 小符号反映大问题,Shell中下划线_与变量的关系。
之前写过一个根据日期和时间自动命名文件名的时候遇到一个问题. #! /bin/bash read -p "please input the filename:" filename ...
- Linux视频主要概述
Linux当中称之为视频的主要为俩个方面(主要以kernel为主): 1.源代码video目录指的是主显示输出,也就是帧缓冲(Frame Buffer)驱动部分,表示对基本图形层的显示支持; 2.源代 ...
- Docker 最常用的监控方案 - 每天5分钟玩转 Docker 容器技术(78)
当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. 在本章中,我们将讨论几个目前比较常用的容器监控工具和方案,为大家构建自己的监控系统提供参考. 首先我们会讨 ...
- Template7插入动态模板
要完成的效果如下图 其中下面添加出来的订单号和订单总价可以看作是接口请求的数据 实现步骤: 1 下载template7:https://github.com/nolimits4web/template ...
- python pip安装方法
1.python安装,最好是按照32位的版本,64位版本有的时候出现奇怪问题. 2.python安装完成后,需要在系统的环境变量"path"中增加路径设置. 3.一般情况下,使用p ...
- SAP 月结F.19与GR/IR
http://blog.sina.com.cn/s/blog_3eeba40101008v75.html 为什么要做月结?月结究竟都结些啥? 月结的目的和手段都不知道,只知道一部分.月结,为了出资产负 ...
- 安装xp遇到的问题与如何连接共享的打印机
2013-12-5 星期四 今天下午去给曹老师鼓捣电脑去了,安装了一个xp系统,加上一些常用的办公软件,在连接上一个共享的打印机. 下面是今天我遇到的问题: 问题:安装xp系统之后,没有本地连接,只有 ...
- win10 uwp 获得元素绝对坐标
有时候需要获得一个元素,相对窗口的坐标,在修改他的位置可以使用. 那么 UWP 如何获得元素坐标? 我提供了一个方法,可以获得元素的坐标. 首先需要获得元素,如果没有获得元素,那么如何得到他的坐标? ...
- property--staticmethod--classmethod
特性(property): 作为装饰器使用,调用方式从最初的方法调用改变为属性调用 类方法(classmethod):和类进行交互,单不和实例进行交互 在函数中可以不用上传参数 静态方法(static ...
- vim中SnipMate 和 YouCompleteMe 插件触发键 tab 冲突
花了好几天废了九牛二虎之力终于在win下把ycm插件装上了 然而在配置插件的时候发现snipmate插件与youcompleteme插件会发生tab键冲突 而ycm比较调,直接使snipmate插件完 ...