pandas —Dataframe属性及其操作

Dataframe基本认识及其属性

# pandas 主要是用于进行数据处理的库
# 里面不仅包含了数据处理,还有统计分析,相关计算,内部封装了numpy相关组件

# numpy核心 -- 多维数组 --ndarray
# pandas 要做数据处理
# series -- 一维结构
# dataframe -- 二维结构
# pannel -- 三维结构

import numpy
import pandas


# 加载数据

res = numpy.load('国民经济核算季度数据.npz',allow_pickle=True)

columns = res['columns']
values = res['values']

# 数组拼接 【相同维度】
data = numpy.concatenate(([columns],values),axis=0)
print(data)


# 如何将 数组 -->转化成我们想要的 比较好看的行列 结构
# 如何将数组 转化为 dataframe

# dataframe 相对于数组 多了 行索引  与列索引
# 可以自己指定 列索引columns
# 也可以指定行索引  index

index = ['index_'+str(i) for i in numpy.arange(69)]

df = pandas.DataFrame(values,columns=columns,index=index)

print(df)


#  如何将df ---》转化为series
#  series只有行索引,没有列索引
#  series 只是dataframe 取一列数据的特殊情况

se = df['时间']
print(se)

print('-'*90)

# # 自己生产一个dataframe
d = {'col1':[0,1,2],'col2':[0,1,2],'col3':[0,1,2]}

df = pandas.DataFrame(data=d,index=['q','w','e'])

print(df)
# # 自己生产一个series

# 拿取多列
res = df[['col1','col2']]
print(res)
# # 自己生产一个series
se = pandas.Series([1,2,3],index=['q','w','e'])

print(se)
# 查看dataframe 属性
print("df 的values:\n",df.values) # 获取df的数组
print("df 的index:\n",df.index) # 获取行索引名称
print("df 的columns:\n",df.columns) # 获取列索引名称
print("df 的size:\n",df.size) #  获取元素个数
# print("df 的itemsize:\n",df.itemsize) # df 没有这个属性
print("df 的dtypes:\n",df.dtypes) #  每一列的数据类型
print("df 的shape:\n",df.shape) # 获取df形状,以元组显示
print("df 的ndim:\n",df.ndim) # 获取df维度----df  是2维的 没有别的维度

Dataframe对文件的操作

查看文件的编码

在这里插入图片描述

在这里插入图片描述

import pandas

# 加载文本数据
# read_table 默认 \t 分隔符
# sep 分隔符
# header = info 自动识别列名。自动认为第一行为列名
# index_col 设置行索引 【0,1】将第0列,第一列作为行索引
# nrows 读取前n行
# usecols 读取指定的列
data = pandas.read_table('data_file/meal_order_info.csv',encoding='ansi',sep=',')
print(data)

# 默认 , 分割
data = pandas.read_csv('data_file/meal_order_info.csv',encoding='ansi')
print(data)

print('-*'*60)

# excel文件读取【xlsx为后缀的文件】
# header 哪一行作为列名
# index_col 设置行索引 【0,1】将第0列,第一列作为行索引
# names 修改表头
# parse_cols 还是在某些版本中作用
data = pandas.read_excel('data_file/meal_order_detail.xlsx',sheet_name=0)
print(data)

# 保存数据---df
#  columns ----指定需要保存的列
#  header ---保存列索引
#  index  --- 保存行索引
#  index_label  ---给保存好的excle文件的行索引起个名称

# data.to_excel("./hh.xlsx")
# pandas.DataFrame.to_csv(data,'ssss.csv')

print('&*#'*50)
data = pandas.read_csv('data_file/ssss.csv',encoding='ansi')
print(data)

Dataframe的增删改查

import pandas

# 加载数据
data = pandas.read_excel('data_file/meal_order_detail.xlsx')
# print(data)


# 非同时索引
'''
# 数组是同时索引【行,列】
# dataframe的非同时索引方法,需要先取列再取行

# 获取detail_id 之后再获取 前5行
res = data['detail_id'][:5]
res1 = data['detail_id'][[0,1,2,3,4]]
res2 = data['detail_id'].head() # head默认获取前5行
print(res,'\n',res1,'\n',res2)
res3 = data['detail_id'].head(10) # 获取前10行

print('-*'*60)
print('-*'*60)

# 获取detail_id 之后再获取 后5行
res = data['detail_id'][-5:]
res1 = data['detail_id'].tail() # head默认获取后5行
print(res,'\n',res1)

res2 = data['detail_id'].tail(10) # 获取后10行


# 获取单列 之后再获取行数据,单行的名称或者下标,
# 多行的名称或者 下标
# 如果是单列,直接写名称,如果是多列,需要将多列的名称组成一个列表
# 不能使用列的下标,只能使用列的名称
res = data[['detail_id','order_id']].head()
print(res)
'''


# 同时索引---loc, iloc ,ix

# loc iloc 索引的方式  
# detail.loc[行名称,列名称]
# detail.iloc[行下标,列下标]
# 获取单行单列  直接放下标[名称]
# 获取多行多列,需要将行下标[名称]、列下标[名称]分别组成列表传进去
res = data.loc[0:5,'detail_id':'dishes_id']
print(res)
# res = data.iloc[0:10,[1,3]]
res = data.iloc[0:10,1:4]
print(res)



# ix 混合索引既可以使用名称也可以使用下标的索引方式
#  ix  在行的维度上可以使用名称,在列的维度上也可以使用名称
#  ix  在行的维度上可以使用下标,在列的维度上也可以使用下标
res = data.ix[0:5,'detail_id':'dishes_id']
print(res)

# 从效率上来说,ix 最慢,如果数据特别大,不推荐使用

import pandas

# 加载数据
data = pandas.read_excel('data_file/users.xlsx')
print(data)


# 给数据data 增加一个 new_age列 【此列的值为age列的值+1】
data.loc[:,'new_age'] = data.loc[:,'age']+1

#  给df 增加一列  直接添加列名,给列名下面赋值
# 增加一行,后面讲解df的拼接

print(data)
import pandas

# 加载数据
data = pandas.read_excel('data_file/users.xlsx')
print(data)

print('-*'*60)
print('-*'*60)
# 删除列
# inplace = True 对原df 产生影响,返回一个None
# inplace = False 对原df 不产生影响,返回删除之后的结果
#res = data.drop(labels=['sex','age'],axis=1,inplace=True)
res = data.drop(labels=['sex','age'],axis=1,inplace=False)
print(res)

# 删除行
res = data.drop(labels=[0,1,2,3,4,5],axis=0,inplace=False)
print(res)


# # 删除age为偶数的行
# 确定age为偶数的行
bool_age = data.loc[:,'age']%2 == 0

# 获取age为偶数的行名称
age_name = data.loc[bool_age,].index

# 删除
res = data.drop(labels=age_name,axis=0,inplace=False)
print(res)

import pandas

# 加载数据
data = pandas.read_excel('data_file/users.xlsx')
print(data)

# 更改所有性别为男的 为nan
# 定位到sex这一列数据,并进行判断 sex = 男的为True,否则为False
res = data.loc[:,'sex'] == '男'
print(res)


# 使用上面确定好的bool列,获取所有sex = ‘男’的数据
data_sex_man = data.loc[res,'sex']
print(data_sex_man)


# 重写赋值【sex=‘男’的数据 改为 sex=‘nan’】
data.loc[res,'sex'] = 'nan'
print(data)

print('-*'*70)

# 不加条件的更改【‘sex’列数据全部更改】
data.loc[:,'sex'] = '0'
print(data)


print('-*'*70)

# 更改age一列中所有的奇数年龄为0

# 找到age列的值为奇数的行
bool_age = data.loc[:,'age']%2 != 0
# 修改
data.loc[bool_age,'age'] = 0
print(data)

print('-*'*70)
# 更改ORGANIZE_NAME列中所有的‘统计班’为0506

# 找到统计班,统计班为true
bool_orgnize_name = data.loc[:,'ORGANIZE_NAME'] == '统计班'

# 修改
data.loc[bool_orgnize_name,'ORGANIZE_NAME'] = '0506'
print(data)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值