(四)pandas数据抽取(提取)

DataFrame对象的loc属性与iloc属性

  • loc属性

    • 以列名(columns)和行名(index)作为参数, 当只有一个参数时,默认是行名,即抽取整 行数据,包括所有列。

  • iloc属性

    • 以行和列位置索引(即:0,1,2,...)作为参数, 0表示第一行,1表示第2行,以此类推。当 只有一个参数时,默认是行索引,即抽取整 行数据,包括所有列。

行提取

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data=[[45,65,100],[56,45,50],[67,67,67]]
index=['张三','李四','王五']
columns=['数学','语文','英语']
df=pd.DataFrame(data=data,index=index,columns=columns)
print(df)
'''
      数学  语文  英语
张三    45    65   100
李四    56    45    50
王五    67    67    67
'''
print('--------------------------')

# 提取行数据
print(df.loc['张三'])  # 行索引名称
print(df.iloc[0])  # 行索引的编号
'''
数学     45
语文     65
英语    100
Name: 张三, dtype: int64
'''

print('------提取多行数据------(谁和谁)---')  #张三和王五
print(df.loc[['张三','王五']])
print(df.iloc[[0,2]])
'''
      数学  语文  英语
张三    45    65   100
王五    67    67    67
'''

print('--------提取连续的多行数据(从谁到谁)-----------------') # 从张三到王五
print(df.loc['张三':'王五'])   # 行索引名称, 包含王五
'''
      数学  语文  英语
张三    45    65   100
李四    56    45    50
王五    67    67    67
'''
print('----------------------------------------')
print(df.iloc[0:2]) # 行索引序号,含0 不含2
'''
      数学  语文  英语
张三    45    65   100
李四    56    45    50
'''
print('---------------------------------')
print(df.iloc[1::]) # iloc[start:stop:step]
'''
      数学  语文  英语
李四    56    45    50
王五    67    67    67
'''
print('---------------------------------')
print(df.iloc[::2]) # iloc[start:stop:step]  步长为2  从0,1,2   取出0,2
'''
      数学  语文  英语
张三    45    65   100
王五    67    67    67
'''

需要注意的是,用loc进行切片操作时,是会取到end的值的,而iloc不会。

前面也提到过,用标签索引切片包含end值,用序号索引切片不包含end值。

列提取

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data=[[45,65,100],[56,45,50],[67,67,67]]
index=['张三','李四','王五']
columns=['数学','语文','英语']
df=pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print('--------------------------')
print(df[['数学','英语']]) # 直接使用列名提取
print('------------------------------')
print(df.loc[:,['数学','英语']])  # 逗号的左侧表示的是行,右侧表示的是列  ,所有行的,数学和英语
print('------------------------------')
print(df.iloc[:,[0,2]])
'''
      数学  英语
张三    45   100
李四    56    50
王五    67    67
'''
print('--------------提取连续的列-------------------')
print(df.loc[:,'语文':])
print('------------------------------')
print(df.iloc[:,1:])
'''
      语文  英语
张三    65   100
李四    45    50
王五    67    67
'''

区域提取

# 提取区域数据
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data=[[45,65,100],[56,45,50],[67,67,67]]
index=['张三','李四','王五']
columns=['数学','语文','英语']
df=pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print(df.loc['张三','数学'],type(df.loc['张三','数学']))
print(df.iloc[0,0]) # 第0 行,第0列
'''
45 <class 'numpy.int64'>
'''
print('------------------------------')

print(df.loc[['张三','王五'],['数学','语文']])
print(df.iloc[[0,2],[0,2]]) # 第0行和第2行,第0列和第2列
'''
      数学  语文
张三    45    65
王五    67    67
'''
print(df.iloc[0:2,0:2]) # ,的左侧行切片,右侧列切片  ,提取的区域数据为连续的数据
'''
      数学  语文
张三    45    65
李四    56    45
'''

print('----------------------------------') # 提取所有行的第0列
print(df.iloc[:,0])
'''
张三    45
李四    56
王五    67
Name: 数学, dtype: int64
'''

条件提取:

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data=[[45,65,100],[56,45,50],[67,67,67]]
index=['张三','李四','王五']
columns=['数学','语文','英语']
df=pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print(df.loc[df['语文']>=60]) # 提取语文成绩大于等于60的学生信息
'''
      数学  语文  英语
张三    45    65   100
王五    67    67    67
'''
# 多个条件之间使用关系运算符
print(df.loc[(df['语文']>=60) & (df['数学']>=60)])
# 王五    67    67    67

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要利用 Pandas 读取 Web 数据,可以使用 Pandas 的 `read_html()` 函数。这个函数会从 HTML 页面中提取表格数据,并返回一个 DataFrame 对象。 以下是一个读取 Web 数据并进行简单分析和可视化的示例: ```python import pandas as pd import plotly.graph_objs as go import plotly.offline as pyo # 读取 Web 数据 url = 'https://en.wikipedia.org/wiki/List_of_countries_by_population_(United_Nations)' dfs = pd.read_html(url) df = dfs[0] # 数据清洗和抽取 df = df[['Country or area', 'UN Region', 'Population(1 July 2018)']] df = df.rename(columns={'Country or area': 'Country', 'Population(1 July 2018)': 'Population'}) df['Population'] = df['Population'].str.replace(',', '').astype(int) # 分析数据 total_population = df['Population'].sum() region_population = df.groupby('UN Region')['Population'].sum().sort_values(ascending=False) # 可视化数据 trace1 = go.Bar(x=region_population.index, y=region_population.values) trace2 = go.Pie(labels=region_population.index, values=region_population.values) layout1 = go.Layout(title='Population by UN Region (Bar Chart)') layout2 = go.Layout(title='Population by UN Region (Pie Chart)') fig1 = go.Figure(data=[trace1], layout=layout1) fig2 = go.Figure(data=[trace2], layout=layout2) pyo.plot(fig1, filename='population_bar_chart.html') pyo.plot(fig2, filename='population_pie_chart.html') ``` 上述代码中,我们首先使用 `pd.read_html()` 函数读取了一个维基百科页面的表格数据,并抽取了需要的列。然后我们对数据进行了清洗和处理,计算了全球总人口和各个 UN 地区的人口,并用 Plotly 绘制了柱形图和饼图来展示这些数据。最后我们使用 `pyo.plot()` 函数将可视化结果保存为 HTML 文件并在浏览器中打开。 需要注意的是,这个示例仅供参考,实际项目中需要根据具体需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值