pandas处理数据的基本方法

pandas的数据结构常用到一维(series),二维(DataFrame)等:

对于二维数据

二维数据包含行索引和列索引

行索引叫index,axis=0
列索引叫columns,axis=1
下面使用代码构造一个二维结构数据如下:

import pandas as pd
import numpy as np
# normal里面参数,此次构造的是平均值为0,标准差为1,10行11列数据
test_data = np.random.normal(0,1,[10,11])
test_data_frame = pd.DataFrame(test_data)
print(test_data_frame)

打印效果如下:
平均值0,标准差1,10行11列二维数据
可以看出,默认添加了行索引[index]和列索引[columns]
若需要自己指定行索引或者列索引,可以在构造DataFrame时加相应参数,如下这样:

test_data = np.random.normal(0,1,[10,11])
index_list = ["row"+str(i) for i in range(10)]
column_list = ["column"+str(i) for i in range(11)]
test_data_frame = pd.DataFrame(test_data,index=index_list,columns=column_list)
print(test_data_frame)

打印效果如下:
加入指定行索引和列索引
可以通过test_data .shape获取数据的行列形状([10,11]),即可以这样获取数据的行数和列数:

# 获取行数
test_data.shape[0]
# 获取列数
test_data.shape[1]

对于DataFrame的其他数据获取如下:

# 获取行索引列表
test_data_frame.index
# 获取列索引列表
test_data_frame.columns
# 获取除索引外的数据矩阵值
test_data_frame.values
# 将数据转置(包括索引)
test_data_frame.T
# 获取数据前num行(若没有num值,默认获取前五行)
num=5
test_data_frame.head(num)
# 获取数据后num行(若没有num值,默认获取后五行)
test_data_frame.tail(num)
# 将原来的行索引删除,变成默认的数字行索引
test_data_frame = test_data_frame.reset_index(drop=True)
# 将原来的行索引变成值,用默认的数字行索引作为行索引
test_data_frame = test_data_frame.reset_index()

删除行索引变成默认
原有行索引变成值
还可以设置多重索引如下:

test_data_frame=test_data_frame.set_index(keys=['column0','column1'])
print(test_data_frame)

打印效果如下:
在这里插入图片描述
此时的数据结构为MultiIndex结构数据(三维数据

可以通过pandas生成一组连续时间序列

# 构建一个从2018.1.1开始的10天时间序列
date_test = pd.date_range(start='2018-1-1',end=None,periods=10,freq="D")
print(date_test)

打印效果如下:
在这里插入图片描述
其中start为开始时间,end为结束时间,periods为相隔天数(若无end的情况下),freq为指定间隔时间,默认为“D”(每天),可以指定“12H”表示每12小时,“B”每个工作日(周一到周五,包含节假日)

series一维结构:

一维数据(series)只有行索引

即将二维Dataframe取特定行就是一维数据如:

serise_data = test_data_frame['column1']
print(serise_data)

打印效果如下:
在这里插入图片描述

pandas中二维Dataframe数据获取

直接使用索引获取数据必须先列后行

如取第一列,第三行数据,test_data_frame[‘column0’][‘row2’]

通过索引获取数据:

通过索引名获取范围数据

# start_index:end_index,表示开始的行索引到结束的行索引,xx_column表示取哪一列的值
test_data_frame.loc[start_index:end_index,xx_column]

通过索引下标获取范围数据

# 表示取第0行到第3行的xx_column列的值
test_data_frame.iloc[0:3,xx_column]

通过索引进行排序

# ascending默认为Ture升序
test_data_frame = test_data_frame.sort_index(ascending=False,)
print(test_data_frame)

打印效果如下:
在这里插入图片描述

通过内容进行排序

# by指定通过哪一列排序,此处为第二列,降序
test_data_frame = test_data_frame.sort_values(by="column1",ascending=False,)
print(test_data_frame)

打印效果如下:
在这里插入图片描述

DataFrame数据统计分析的基本方法

求极值的方法

求最大值:

# 对列求最大值
test_data_frame.max(0)
# 对行求最大值
test_data_frame.max(1)
# 求最小值同理
test_data_frame.max(0) #对列求最小值 
test_data_frame.max(1) #对行求最小值 

对列求最大值如下:
对列求最大值
对行求最大值如下:
对行求最大值
还可以获取最大值最小值的位置

# 获取列最大值的位置
test_data_frame.idxmax(axis=0)
# 获取行最大值的位置
test_data_frame.idxmax(axis=1)
# 获取列最小值得位置
test_data_frame.idxmin(axis=0)
# 获取行最小值得位置
test_data_frame.idxmin(axis=1)

列最大值的位置如下:
列最大值位置
行最大值位置如下:
行最大值位置

累计求和

# 累计求第二列的值
test_data_frame.column1.cumsum()

打印结果如下:
累计求和
不能使用test_data_frame.row1.cumsum()累计求行的和

通过比较大小来筛选数据

# 取第二列大于0,且第四列大于0的数据
test_data_frame[(test_data_frame['column1'] > 0) & (test_data_frame['column3'] > 0)]

打印效果如下:
在这里插入图片描述
还可以这样筛选如下:

# 取第二列大于0,且第四列大于0的数据
test_data_frame.query("column1>0 & column3>0")

打印结果与上面一致

文件读写方法

读取csv文件

# 读取xxxx.csv文件,并只读取第二列和第三列数据
csv_dataframe = pd.read_csv("xxxx.csv",usecols=['column1', 'column2'])

读取excel文件

# 读取xxx.xlsx文件
excel_data = pd.read_excel('xxx.xlsx')
写入csv文件
# index表示是否将行索引写入文件,columns指定将哪几列写入到文件
# mode默认为r,表示重写,a表示追加,header表示是否将索引列写入文件
test_data_frame.to_csv('xxx.csv',index=False,columns=['column1','column2','column3'],mode='a',header=False)

写入到excel文件类似的

# index表示是否将行索引写入文件,columns指定将哪几列写入到文件
# excel没有mode参数,header表示是否将索引列写入文件
test_data_frame.to_excel('xxx.xlsx',index=False,columns=['column1','column2','column3'],header=False)

excel如下:
在这里插入图片描述

缺失值处理的方法

处理缺失值为NaN的数据

可以删除NaN的行:test_data_frame.dropna()
也可以以其他值添加:

# 将第二列数据的NaN值用该列的平均值替换,test_data_frame['column1'].mean()取第二列的平均值
test_data_frame['column1'].fillna(test_data_frame['column1'].mean(),inplace=True)
处理缺失值为其他(如?)的数据

其他格式异常值替换可以先将其替换成NaN的值再通过NaN替换成其他如平均值等

# 将test_data_frame 中的?全部替换成NaN的值
test_data_frame = test_data_frame.replace(to_replace="?",value=np.nan)
然后再通过上面的缺失值NaN处理
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值