Pandas学习 DataFrame(一)

Pandas功能非常强大,本文针对笔者日常学习做整理用,如果顺便能解决大家一些使用疑惑,不胜荣幸

学习教程参考链接:http://c.biancheng.net/pandas/

Pandas 库基于 Python NumPy 库开发而来,提供了两种数据结构,分别是 Series(一维数组结构)与 DataFrame(二维数组结构),这两种数据结构极大地增强的了 Pandas 的数据分析能力。

Pandas数据结构(了解)

DataFrame结构和Series结构

DataFrame 一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以是字符串、整型或者浮点型等。

Series 结构,也称 Series 序列,是 Pandas 常用的数据结构之一,它是一种类似于一维数组的结构,由一组数据值(value)和一组标签组成,其中标签与数据值之间是一一对应的关系。

DataFrame结构数据经过筛选、聚类、提取等处理后得到的数据为Series结构数据。

# 导库
import pandas as pd

DataFrame 操作

  1. 创建DataFrame

# 1、初值列表和列名(两个值均为可选)
df = pd.DataFrame([['Alex',10],['Bob',12],['Clarke',13]], columns=['Name','Age'])
print(df)

# 2、ndarrays 创建
dataset1 = {
'sites': ["Google", "Runoob", "Wiki"],
    'number': [1, 2, 3]
}

df_dict1 = pd.DataFrame(dataset1)
print('\n',df_dict1)

# 3、字典创建
dataset2 = [
    {'Name': "A","Age": '1'},
    {'Name': "B","Age": '2'},
    {'Name': "A","Age": '2'}
]

df_dict2 = pd.DataFrame(dataset2)
print('\n',df_dict2)

  1. 获取行列索引

# 获取行标签
print('index:',df.index.values)
# 获取列索引
print('columns:',df.columns.values)
  1. 行数据:添加/获取/删除

(1)添加行数据

# 列表类型
df.loc[len(df)] = ['Jane',14]  #(源数据末尾)

# 字典类型
data_dict = {'Name':'Alice','Age':15}
df.append(data_dict, ignore_index=True)  # append将被弃用,改用concat

temp = pd.DataFrame([data_dict])  # 根据字典生成新的dataframe

# 2 行方向合并两个dataframe (追加类型,索引会乱)
df = pd.concat([df,temp],axis=0)  

# 3 重置索引
df = df.reset_index(drop=True)  # drop参数True表示删除原索引,False将保留原索引转化为df的新列

# 指定行插入数据(pandas无此功能,需要借助numpy或采取其他策略)
import numpy as np
df2 = pd.DataFrame(np.insert(df.values, 1, values=['John', 11], axis=0)) # 源数据,插入位置,值,行插入
# define column names of DataFrame
df2.columns = df.columns

df2

(2)获取行数据

# 获取前两行数据(默认不填,取前五行)
print("——前两行——\n",df.head(2)) 
# 获取第三行数据值
print("——第三行——\n",df.loc[2].values)
# 读取4-5行数据[切片或列表],即df.loc[3:4]或df.loc[[3,4]]
print("——第4-5行——\n",df.loc[3:4])

#读取df中随机3行数据(3个样本)
data=df.sample(3)
print("——随机3行——\n{0}".format(data))

(3)删除行数据

print("------源数据------\n",df)
print("------删除第1行------")
df1=df.drop(labels=0)   # 按行删除第1行
print(df2)

print("------删除1,3行------")
# 通过labels来控制删除行或列的个数,如果是删多行/多列,需写成labels=[1,3],不能写成labels=[1:2],用:号会报错
# 删除指定的某几行(非连续的)
df2=df.drop(labels=[0,2],axis=0)   # axis=0 表示按行删除,删除第1行和第3行
print(df2)

# 要删除连续的多行可以用range(),删除连续的多列不能用此方法
print("------删除2-4行------")
df3=df.drop(labels=range(1,4),axis=0)   # axis=0 表示按行删除,删除索引值是第1行至第3行的正行数据
print(df3)

4. 列数据:添加/获取/删除

(1)添加列数据

df['Gender'] = ['Boy','Boy','Girl','Girl','Girl']
df['Math'] = [92,67,83,75,89]
df['PE'] = [92,67,83,75,89]

# 指定位置插入列
df.insert(loc=2, column='Test', value=[i for i in range(len(df))])

print(df)

(2)获取列数据

# 获取单列数据
print(df['Name'].values)
# 获取多列数据
print(df[['Name','Math']])

(3)删除列数据

# 删除单列
del df['Test']
df=df.drop(labels='Gender',axis=1)  # axis=1 表示按列删除,删除gender列
# 删除指定的某几列
df=df.drop(labels=['Math',"PE"],axis=1)  # axis=1 表示按列删除,删除gender、age列
print(df)

# PS: drop(labels, axis=0, level=None, inplace=False) 标签,轴向,等级,是否对源数据生效

(4)重名名列

old = df.columns.values
df.rename(columns = {"Name":"name","Age":"age"}, inplace=True) 
new = df.columns.values
print('old:',old)
print('new:',new)

#%% md

5. 查询/排序/筛选数据

(1)读取数据

# 从文件读取
# 1、从Excel文件读取.xlsx/.xls
df = pd.read_excel(r'D:\ATools\Python\Flies\西瓜数据集.xlsx')
# 2、从.csv/.txt读取
df_csv = pd.read_csv(r'D:\ATools\Python\Flies\西瓜数据集.txt')#,encoding='GB2312' 编码格式可选(根据需要制定)
print(df)

(2)数据排序

# 按某列值降序排序
df.sort_values(by=['密度'],ascending=False) # ascending=False(默认为True,升序)

# 按行索引排序
df.sort_index()

# 按列索引排序
df.sort_index(axis=1, ascending=False)

#%%

(3)数据筛选

df0 = df[df['好瓜']=='是']
df0 = df0[df0['密度']>=0.5]
df0 = df0[df0['色泽']!='青绿']
print(df0)

(4)数据去重

df.drop_duplicates(subset=['色泽'], keep='first', inplace=False, ignore_index=False)
# subset:表示要进去重的列名,默认为 None。
# keep:有三个可选参数,分别是 first、last、False,默认为 first,表示只保留第一次出现的重复项,删除其余重复项,last 表示只保留最后一次出现的重复项,False 则表示删除所有重复项。
# inplace:布尔值参数,默认为 False 表示删除重复项后返回一个副本,若为 Ture 则表示直接在原数据上删除重复项。

(5)数据转置

df_T = pd.DataFrame(df.values.T,columns=df.index.values,index=df.columns.values)
print(df_T)

参考学习教程:http://c.biancheng.net/pandas/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值