python pandas.DataFrame 数据合并
2018-01-20 16:59
573 查看
# -*- coding: utf-8 -*- # encoding=utf-8 from __future__ import division import numpy as np import xlwt import os # 导入matplot 函数 import matplotlib.pyplot as matplot_pyplot # 导入拉格朗日插值函数 from scipy.interpolate import lagrange np.random.seed(12345) matplot_pyplot.rc('figure', figsize=(10, 6)) from pandas import Series, DataFrame import pandas as pd np.set_printoptions(precision=4, threshold=500) pd.options.display.max_rows = 100 # 缺失值处理---拉格朗日插值法 # 销量数据路径 inputFile = 'd:/data/catering_sale.xls' # 输出数据路径 outputFile = 'd:/data/sales.xls' # 读入数据 data = pd.read_excel(inputFile) # 过滤异常值 data[u'销量'][(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None # s 为列向量,n 为被插值的位置,k 为取前后的数据个数,默认为5 def ployinterp_column(s, n, k=5): # 取数 y = s[list(range(n - k, n)) + list(range(n + 1, n + 1 + k))] # 剔除空值 y = y[y.notnull()] # 剔除空值 return lagrange(y.index, list(y))(n) # 插值并返回插值结果 # 逐个元素判断是否需要插值 for i in data.columns: for j in range(len(data)): if (data[i].isnull())[j]: # 如果为空即插值 data[i][j] = ployinterp_column(data[i], j) # data.to_excel(outputFile) # 输出结果,写入文件 # print data ### dataframe 合并 # - Merge 方法:根据一个或多个键将不同dataFrame 中的行合并 # - Concat方法:沿一条轴将多个对象堆叠起来 # 数据风格的DataFrame 合并 # - Merge # - Merge 参数 df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data': range(7)}) df2 = pd.DataFrame({'key': ['a', 'b', 'd'], 'data2': range(3)}) print 'df1:=\n', df1 print 'df2;=\n', df2 pd.merge(df1, df2) pd.merge(df1, df2, on='key') # 2 df3 = pd.DataFrame({'lkey': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7) }) print 'df3:=\n', df3 df4 = pd.DataFrame({'rkey': ['a', 'b', 'd'], 'data2': range(3) }) print 'df4:=\n', df4 # 内连接 df3_merge_df4 = pd.merge(df3, df4, left_on='lkey', right_on='rkey') print 'df3_merge_df4:=\n', df3_merge_df4 # 外连接 df1_merge_df2 = pd.merge(df1, df2, how='outer') print 'df1_merge_df2:=\n', df1_merge_df2 # 左连接 df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'], 'data1': range(6) }) df2 = pd.DataFrame({'key': ['a', 'b', 'a', 'b', 'd'], 'data2': range(5) }) print 'df1:=\n', df1 print 'df2:=\n', df2 # 左连接 df1_left_df2 = pd.merge(df1, df2, on='key', how='left') print 'df1_left_df2:=\n', df1_merge_df2 # 内连接 df1_inner_df2 = pd.merge(df1, df2, how='inner') print 'df1_inner_df2:=\n', df1_inner_df2 # 4 left = pd.DataFrame({'key1': ['foo', 'foo', 'bar'], 'key2': ['one', 'two', 'one'], 'key3': [1, 2, 3] }) right = pd.DataFrame({'key1': ['foo', 'foo', 'bar', 'bar'], 'key2': ['one', 'one', 'one', 'two'], 'rval': [4, 5, 6, 7] }) print 'left:=\n', left print 'right:=\n', right left_merge_right = pd.merge(left, right, on=['key1', 'key2'], how='outer') # left_on_right = pd.merge(left, right, on='key1') print 'left_on_right:=\n', left_on_right left_one_right = pd.merge(left, right, on='key1', suffixes=('_left', '_right')) print 'left_on_right:=\n', left_on_right # 索引上的合并 # 轴向连接 # - Numpy 数组 -----concatenation # - Pandas 对象 ----concat # -- Concat 对象 # 1 left1 = pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'], 'value': range(6) }) right1 = pd.DataFrame({'group_val': [3.5, 7]}, index=['a', 'b']) print 'left1:=\n', left1 print 'right1:=\n', right1 left_index_right = pd.merge(left1, right1, left_on='key', right_index=True) print 'left_index_right:=\n', left_index_right # 2 lefth = pd.DataFrame({'key1': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], 'key2': [2000, 2001, 2002, 2001, 2002], 'data': np.arange((5.)) }) righth = pd.DataFrame( np.arange(12).reshape((6, 2)), index=[ ['Nevada', 'Nevada', 'Ohio', 'Ohio', 'Ohio', 'Ohio'], [2001, 2000, 2000, 2000, 2001, 2002] ], columns=['event1', 'event2'] ) print 'lefth:=\n', lefth print 'righth:=\n', righth lefth_merge_righth = pd.merge( lefth, righth, left_on=['key1', 'key2'], right_index=True) print 'lefth_merge_righth:=\n', lefth_merge_righth left2 = pd.DataFrame( [[1., 2], [3., 4], [5., 6]], index=['a', 'c', 'e'], columns=['Ohio', 'Nevada'] ) right2 = pd.DataFrame( [[1., 2], [3., 4], [5., 6]], index=['a', 'b', 'e'], columns=['Ohio', 'Nevada'] ) print 'left2:=\n', left2 print 'right2:=\n', right2 left2_right2 = pd.merge(left2, right2, how='outer', left_index=True, right_index=True) print 'left2_right2:=\n', left2_right2 # 3 left2 = pd.DataFrame([[1., 2], [3., 4], [5., 6]], index=['a', 'c', 'e'], columns=['Ohio', 'Nevada'] ) right2 = pd.DataFrame([[7., 8.], [9., 10.], [11., 12.], [13, 14]], index=['b', 'c', 'd', 'e'], columns=['Missouri', 'Alabama'] ) print 'left2:=\n', left2 print 'right2:=\n', right2 left2_join_right2 = left2.join(right2, how='outer') print 'left1:=\n', left1 print 'right1:=\n', right1 left1_merge_right1 = pd.merge(left1, right1, left_on='key', right_index=True) print 'left1_merge_right1:=\n', left1_merge_right1 left1_join_right1 = left1.join(right1, on='key') print 'left2_join_right2:=\n', left1_join_right1 # 4 another = pd.DataFrame([[7, 8], [9, 10], [11, 12], [16, 17]], index=['a', 'c', 'e', 'f'], columns=['New York', 'Oregon'] ) # 多表外连接 left2_join_right2_another = left2.join([right2, another]) print 'another:=\n', another print 'left2:=\n', left2 print 'right2:=\n', right2 print 'left2_join_right2_another:=\n', left2_join_right2_another left2_outer_join_right2_another = left2.join([right2, another], how='outer') print 'left2_outer_join_right2_another:=\n', left2_join_right2_another # 轴向连接 # Numpy数组 ---concatenation # Panda 对象 --- concat # Concat 的参数 arr=np.arange(12).reshape((3,4)) print arr
相关文章推荐
- 【pandas】[3] DataFrame 数据合并,连接(merge,join,concat)
- Python数据分析:pandas中Dataframe的groupby与索引
- python:pandas合并csv文件的方法(图书数据集成)
- python:pandas合并csv文件(图书数据集成)
- <Python数据分析>pandas, DataFrame, Index的方法delete和drop的区别
- python数据分析之pandas库的DataFrame应用二
- 利用 Python 进行数据分析(七)pandas 简单介绍(Series 和 DataFrame)
- 利用 Python 进行数据分析(十二)pandas:数据合并
- Python_pandas 两种主要的数据类型(Series、DataFrame)
- 利用Python进行数据分析(12) pandas基础: 数据合并
- 利用 Python 进行数据分析(八)pandas 基本操作(Series 和 DataFrame)
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一、pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主
- [置顶] 【python pandas】 Dataframe的数据print输出 显示为...省略号
- 【pandas】[3] DataFrame 数据合并,连接(merge,join,concat)
- python - pandas dataFrame merge 数据合并
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
- 利用Python进行数据分析(12) pandas基础: 数据合并
- PANDAS 数据合并与重塑(concat篇) 原创 2016年09月13日 19:26:30 47784 pandas作者Wes McKinney 在【PYTHON FOR DATA ANALYS
- 利用 Python 进行数据分析(十二)pandas:数据合并
- python、pandas文件合并、数据去重