判断随机抽取代码_大数据分析技术——数据清理(数据抽取实践)

1

数据抽取

关于数据抽取操作,我们前面讲它的理论部分时曾说过,它又可以细分为很多种操作。PS:这一节中的示例有点点多,请大家耐心看完,谢谢啦。

下面我们一一来学习它们的具体使用:

1、字段抽取

import pandas as pd

from pandas import Series

from pandas import DataFrame

#设置字段对齐

pd.set_option('display.unicode.ambiguous_as_wide', True)

pd.set_option('display.unicode.east_asian_width', True)

df = DataFrame({'手机':Series(['13911272345','13911273456','13911275675','13911271234','13911272468','13911270987'])})

#这里需要注意:必须在df['手机']加上“.str”

#然后再调用slice(),否则会提示Series对象没有slice()方法

first = df['手机'].str.slice(0,3)

middle = df['手机'].str.slice(3,7)

last = df['手机'].str.slice(7,11)

#利用抽取得来的数据重新组合新的数组,并输出

df = DataFrame({'first':first,'middle':middle,'last':last})

print(df)

其运行结果如下:

     first middle    last

0   139     1127  2345

1   139     1127  3456

2   139     1127  5675

3   139     1127  1234

4   139     1127  2468

5   139     1127  0987

2、字段拆分,在拆分诸如IP地址这样的数据时非常方便:

import pandas as pd

from pandas import Series

from pandas import DataFrame

#设置字段对齐

pd.set_option('display.unicode.ambiguous_as_wide', True)

pd.set_option('display.unicode.east_asian_width', True)

df = DataFrame({'IP地址':Series(['1.1.1.1','192.168.123.123','123.123.123.123','255.50.50.1'])})

df2 = df['IP地址'].str.split('.',4,True)

print(df2)

print()

df2.columns=['IP1','IP2','IP3','IP4']

print(df2)

其运行结果如下:

        0      1      2      3

0      1      1      1      1

1  192  168  123  123

2  123  123  123  123

3  255    50    50      1

     IP1   IP2   IP3   IP4

0      1      1      1      1

1  192  168  123  123

2  123  123  123  123

3  255    50    50      1

3、重置索引:将某一列作为整个数据表的索引,方便后续的操作:

import pandas as pd

from pandas import Series

from pandas import DataFrame

from pandas import read_excel

#设置字段对齐

pd.set_option('display.unicode.ambiguous_as_wide', True)

pd.set_option('display.unicode.east_asian_width', True)

df = read_excel(r'E:\tmp\pandas\example1.xlsx',sheet_name='Sheet1')

df1 = df.head()

print(df1.set_index('学号'))

print()

print(df1)

其运行结果如下:

4b3546833d6352aea868fbb2582933ce.png

4、条件抽取,把符合一定条件的数据提取出来:

import pandas as pd

from pandas import Series

from pandas import DataFrame

from pandas import read_excel

#设置字段对齐

pd.set_option('display.unicode.ambiguous_as_wide', True)

pd.set_option('display.unicode.east_asian_width', True)

df = read_excel(r'E:\tmp\pandas\example1.xlsx',sheet_name='Sheet1')

#下面这两代码的意思是:

#把成绩单中英语成绩大于120分的数据单独拎出来

#注意:在这个成绩单的数据表中,所有的数字都是以字符串形式存在

#因此要想做比较,则必须先做类型转换,利用astype(int)转为int类型

print(df[df.英语.astype(int)>120].shape)

print(df[df.英语.astype(int)>120].head())

print()

#下面这两代码的意思是:

#把所有英语成绩介于120到150之间的数据单独拎出来

print(df[df.英语.astype(int).between(130,150)].shape)

print(df[df.英语.astype(int).between(130,150)].head())

print()

#下面这两代码的意思是:

#把所有语文成绩中缺考的数单独拎出来

print(df[df.语文=='缺考'].shape)

print(df[df.语文=='缺考'])

print()

#下面这两代码的意思是:

#把所有语文成绩中缺考或作弊、物理成绩中缺考或作弊的数据拎出来

print(df[(df.语文=='缺考')|(df.语文=='作弊')|(df.物理=='作弊')|(df.物理=='缺考')].shape)

print(df[(df.语文=='缺考')|(df.语文=='作弊')|(df.物理=='作弊')|(df.物理=='缺考')])

print()

#下面这两行代码的意思:

#把语文成绩中包含缺考的数据拿出来

print(df[df.语文.str.contains('缺考',na=False)].shape)

print(df[df.语文.str.contains('缺考',na=False)])

其运行结果如下:

262bccd18b966e579e6745743635c983.png

5、随机抽样,利用获取的随机数值作为索引来随机抽取其中的数据,索引通常作为行索引,因为默认情况下的行索引是整数值,而我们得出来的随机数值也通常会是整数值:

import numpy as np

import pandas as pd

from pandas import Series

from pandas import DataFrame

from pandas import read_excel

#设置字段对齐

pd.set_option('display.unicode.ambiguous_as_wide', True)

pd.set_option('display.unicode.east_asian_width', True)

df = read_excel(r'E:\tmp\pandas\example1.xlsx',sheet_name='Sheet1')

index = np.random.randint(0,30,5)

print(index)

print(df.loc[index,:])

其运行结果如下:

a2e7c4359dc5d969a6a10ca193ee7cba.png

6、通过索引获取数据,有很多种方式:提供行索引、提供列标签、采用索引列表等:

import pandas as pd

from pandas import Series

from pandas import DataFrame

from pandas import read_excel

#设置字段对齐

pd.set_option('display.unicode.ambiguous_as_wide', True)

pd.set_option('display.unicode.east_asian_width', True)

df = read_excel(r'E:\tmp\pandas\example1.xlsx',sheet_name='Sheet1')

#loc[start:end]表示抽取从start开始,到end截止的这么多行的数据

print(df.loc[0:3])

print()

#下面这种索引抽取方式则是以某个列名为索引来抽取,我们这里显示结果前5行

#得到的是一个Series对象,不再是DataFrame对象!!!!!

print(df.loc[:,'数学'].head())

print()

#下面这种索引抽取方式则是以行索引来抽取,得到的是Series对象!!!!!

print(df.loc[1])

print()

#下面这种方式是以索引列表的形式来获取,所得到的则是一个DataFrame对象

print(df.loc[[0,3]])

#下面这种方式使用索引号来获取数据:df.iloc[行索引号,列索引号]

#抽取第1行、第4列的数据,返回的是单个值

print(df.iloc[1,4])

print()

#抽取第1行和第3行上的数据

print(df.iloc[[0,3],:])

print()

#抽取第1行到第3行上的数据

print(df.iloc[0:3,:])

print()

#抽取所有数据的第6列的数据,结果是Series对象

print(df.iloc[:,5].head())

print()

#抽取第2行上的全部数据,结果是Series对象

print(df.iloc[1,:])

print()

得到的结果如下(这里需要两张运行结果截图来展示):

1fa9d107cb9a77f2f5cd83d628aeb198.png

572617d55b055da9a072bd886c41497d.png

7、以字典形式获取数据:就是把一个字典中的key和value都变成一个DataFrame对象中的列:

import pandas as pd

from pandas import DataFrame

my_dict={'col1':'[a,b,c]','col2':'[1,2,3]'}

#以字典为数据对象构建DataFrame对象,注意这里的orient参数含义

df = DataFrame.from_dict(my_dict,orient='index')

#下面这七行代码则告诉我们如何把一个字典中的key和value都

#编程一个DataFrame对象中的列,并重置DataFrame对象的索引

#请务必仔细看每一步的输出结果的变化

print(df)

print()

df=df.reset_index()

print(df)

print()

df.columns=['key','value']

print(df)

其运行结果如下:

f74f4508eee157200435d93fdf369799.png

2

总结

这一小节,我们主要就如何进行数据抽取来做一些实践示例的分享。虽然有典型的其中数据抽取操作,但实际数据抽取中会用到的哪种或哪几种,完全取决于当时的实际问题需要。请各位看官尽量多掌握几种,以免用时发生临时抱佛脚的尴尬。

OK,本节的知识暂时分享到这,谢谢大家!我们下一节的分享中,不见不散!

f8c6c03ac5d1c35e812272cc683237d6.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值