基于python的大数据分析之数据抽取

自己总结的一点小知识,相互提高吧。

# -*- coding: utf-8 -*-
"""
Created on Thu Dec 19 14:43:52 2019

Description: 关于数据抽取

@author: EricRay

"""
import numpy as np
import pandas as pd
from pandas import read_excel
from pandas import DataFrame
df = read_excel(r'E:\python\hello\files\i_nuc.xls',sheet_name='Sheet4')
print(df.head(),'\n')
#i_buc.xls会在资源中给出
"""
记录抽取:
根据一定的条件,对数据进行抽取
    df[condition]
    condition表示过滤条件
    返回值:DataFrame
condition常用类型:
比较运算:==, < , > , <= , >= , !=
范围运算:between(left,right)
空值运算:pandas.isnull(column),如df[df.title.isnull()]
字符串匹配:str.contains(patten,na = False),如df[df.title.str.contains('column',na=False)]
逻辑运算:&,| ,not(取反)
"""
print("电话为133322252452的学生:\n",df[df.电话==13322252452],'\n')
print("电话>13500000000的学生:\n",df[df.电话>13500000000],'\n')
print("电话号码在13400000000和13900000000之间:\n",df[df.电话.between (13400000000,13999999999)],'\n')
print("IP为空的:\n",df[df.IP.isnull()],'\n')
print("IP包含222:\n",df[df.IP.str.contains('222',na=False)],'\n')


"""

随机抽样:
    numpy.random.randint(start,end,num)
    start表示范围的开始值
    end表示范围的结束值
    num表示抽样的个数
返回值:行的索引值序列    
"""
r = np.random.randint(0,10,3);
print("随机抽样索引:\n",r,'\n')
print("抽取r行数据:\n",df.loc[r,:],'\n')

"""
通过索引抽取数据 ,
1.使用索引名(标签)选取数据:df.loc[行标签,列标签]
df.loc 的第一个参数是行标签,第二个参数是列标签(可选参数,默认为所有列标签),
两个参数既可以是列表也可以是单个字符,如果两个参数都是列表则返回的是DataFrame,
否则为Series
"""

df = df.set_index('学号')  #更改学号列为新的索引
print("更改索引后的数据:\n",df.head(),'\n')
print("选取a到b行的数据:\n",df.loc[2308024241:2308024201],'\n')
print("选取电话列的数据:\n",df.loc[:,'电话'].head(),'\n')

#返回结果示例
df1 = pd.DataFrame({'a':[1,2,3],
                    'b':['a','b','v'],
                    'c':["A","B","C"]})
print("df1结果:\n",df1,'\n')
print("c抽取index=1的行:\n",df1.loc[1],'\n') #注意返回结果是Series,而不是DataFrame`
print("抽取index=1和2两行:\n",df1.loc[[1,2]],'\n')#同时抽取多行时,行的索引必须是列表的形式,而不能简单的用逗号隔离,如df.loc[1,2]会提示出错

"""
2.使用索引号抽取数据:
df.iloc[行索引号,列索引号]
"""
print("选取第2行第1列的值:\n",df.iloc[1,0],'\n')
print("选取第1行和第3行的数据:\n",df.iloc[[0,2],:],'\n')
print("选取第1行到第3行(不包含)的数据:\n",df.iloc[0:2,:],'\n')
print("选取第2列:\n",df.iloc[:,1],'\n')

"""
loc为location的缩写,iloc为integer&location的缩写。
更为广义的切片方式是用.ix,它自动根据所给的索引类型判断是否使用所以号还是索引名(标签)进行切片。
iloc:为整型索引(只能是索引号索引)
loc:为字符串索引(索引名索引)
ix: 是iloc和loc的合体,根据索引号或者索引名索引皆可,但是当索引名为Int类型时,
    只能用索引名索引,不能用索引号索引。
"""

index_loc = ['a','b']
index_iloc = [1,2]
data = [[1,2,3,4],[5,6,7,8]]
columns = ['one','two','three','four']
df1 = pd.DataFrame(data = data,index = index_loc,columns = columns)
df2 = pd.DataFrame(data = data,index = index_iloc,columns = columns)

print("df1结果:\n",df1,'\n')
print("df2结果:\n",df2,'\n')

"""
print("按索引名提取:\n",df1.ix['a'],'\n')
print("按索引号提取\n",df1.ix[0],'\n')
print("按索引名提取:\n",df2.ix[1],'\n')
#print("按索引号提取报错:\n",df2.ix[0],'\n')
#注:ix已经被弃用
"""

print("按索引名提取:\n",df1.loc['a'],'\n')
print("按索引号提取\n",df1.iloc[0],'\n')
print("按索引名提取:\n",df2.iloc[1],'\n')

"""
字典数据抽取:抽取为dataframe。有三种方式
"""
#1.字典key 与 value 各作为一列
d1 = {'a':'[1,2,3]','b':'[0,1,2]'}
a1 = pd.DataFrame.from_dict(d1, orient='index')#key列作为 index
a1.index.name = 'key' #将index的列名改为'key'
b1 = a1.reset_index() #重新增加index, 并将原index做成'key’列
b1.columns = ['key','value']
print("字典抽取方式1结果:\n",b1,'\n')

#2.字典里每一个元素作为一列(同长)
d2 = {'a':[1,2,3],'b':[0,1,2]}
#print(d2)
a2=DataFrame(d2)
print("字典抽取方式2结果:\n",a2,'\n')

#3.字典里每一个元素作为一列(不同长)
d3 = {'one':pd.Series([1,2,3]),
      'two':pd.Series([4,5,6,7])}

df3 = pd.DataFrame(d3)
print("字典抽取方式3结果:\n",df3,'\n')

你可能感兴趣的:(Python,基于python的大数据分析)