pandas数据操作

import pandas as pd

import numpy as np

# Series是一个一维数组的对象

# 1.通过列表创建Series对象
# 由索引和数据组成的,左边是索引 右边是数据

ser_obj = pd.Series(range(10,20))

# 获取索引 RangeIndex是索引的类型

print(ser_obj.index)
# 获取值
print(ser_obj.values)
# head()函数 默认查看前5条数据 ,可以传入制定查看数据的条数
print(ser_obj.head())
# 根据索引取出数据
print(ser_obj[5])
# 基本运算
print(ser_obj**2)
# 筛选数据
print(ser_obj>15)
# 取出符合条件的数据
print(ser_obj[ser_obj>15])

# 2.通过字典构建series对象,字典中的key作为索引,值作为值 索引类型:Int64Index

student = {
    2001:15.5,
    2005:20.4,
    2008:26.5
}

# 传入字典

ser_obj = pd.Series(student)

# 指定索引名称

ser_obj.index.name = 'year'

# 指定series对象名称

ser_obj.name = 'GDP'

# 3.手动指定索引和数据类型
# 1.数据  2.index=索引列表

ser_obj = pd.Series(['张三','李四','王五'],index=['a','b','c'])
ser_obj = pd.Series(['10','20','30'],index=['a','b','c'],dtype='float32')
print(ser_obj)

# DataFrame类
# 类似多维数组/表格数据
# 分为行索引和列索引
# 每列的数据可以是不同的类型

# 创建二维数组
# randn() 生成带有正负值的数据

arr = np.random.randn(3,4)

# 通过ndarrary创建dataframe对象
# 二维数组中每一个小数组中的数据在dataframe中是一行
# 二维数组中每一个小数组中对应索引的数据在dataframe中是一列
# 指定行索引和列索引
# index 指定行索引   columns指定列索引

df_obj = pd.DataFrame(arr,index=['a','b','c'],columns=['name','age','phone','sex'])

# 通过字典创建DataFrame对象
# 保证数据中至少有一个列数据是带有行索引的
# key作为列索引  value作为一列数据

dict_data = {

    'A':1,
    'B':pd.Series(range(4),index=list(range(4)),dtype='int32'),
    'C':np.array(range(4,8),dtype='int32'),
    'D':4,
    'E':'hello',
    'F':6

}

df_obj = pd.DataFrame(dict_data)

# 通过索引取出某一列的数据

print(df_obj['C'])
print(type(df_obj['C']))
# 通过属性获取某一列数据,如果列名中有空格,会导致获取失败
# print(df_obj. B)

# 修改数据
df_obj['C'] = pd.Series('world',index=list(range(4)))
print(df_obj)
# 添加新列
df_obj['G'] = df_obj['B']*2
print(df_obj)
df_obj['H'] = '你好'
print(df_obj)
# 删除列
del(df_obj['H'])
print(df_obj)

# 查看索引
# Series和DataFrame对象的索引都是Index对象
# 索引对象不可变,为了保证数据的安全性
# Index  Int64Index RangeIndex(默认)  DateTimeIndex 时间戳索引 MultilIndex 层级索引
ser_obj = pd.Series(range(5),index=list(range(5)))
print(type(ser_obj.index))
print(type(df_obj.index))
# 获取索引值
print(df_obj.index[2])
# 修改索引值 索引不可修改 TypeError: Index does not support mutable operations
# df_obj.index[0] = 2

import pandas as pd

# 构建series对象

ser_obj = pd.Series(range(5,10),index=['a','b','c','d','e'])

ser_obj.name = 'numbers'

ser_obj.index_name = 'index'

print(ser_obj)

# 根据索引取出数据

print(ser_obj['a'])

print(ser_obj[4])

# 切片,根据rangeindex切片不包括结束位置

print(ser_obj[1:3])

# 根据指定索引切片,包含结束位置

print(ser_obj['b':'d'])

# 不连续索引

print(ser_obj[[0,2,4]])

print(ser_obj[['a','c']])

# 布尔索引

import numpy as np

arr = np.array(range(10))

print(arr[arr>5])

bool_ser = ser_obj > 4

print(bool_ser)

print(ser_obj[bool_ser])

# 没有指定行索引和列索引,默认为RangeIndex

df_obj = pd.DataFrame(np.random.rand(4,5),columns=['A','B','C','D','E'])

print(df_obj['B'][1])

# 指定行索引

df_obj.index = ['a','b','c','d']

print(df_obj)

# 根据列索引取出一列数据,取出的是一个Series对象

print(type(df_obj['B']))

# 不连续索引,列索引

print(df_obj[['A','C']])

# 不能通过默认的rangeindex取出列数据
# print(df_obj[[0,2]])

# 切片

print(df_obj['a':'c'])

print(type(df_obj['a':'c']))

# 布尔索引
bool_df = df_obj > 0.5
print(bool_df)
# 根据布尔索引取出数据,并且不符合条件的数据自动填充为NaN,返回DataFrame对象
print(df_obj[bool_df])

ser_obj1 = pd.Series(range(10,20),index=range(10))
ser_obj2 = pd.Series(range(25,30),index=range(5))

print(ser_obj1)

print(ser_obj2)

ser_obj1 + ser_obj2

df_obj1 = pd.DataFrame(np.random.rand(2,2),columns=['a','b'])

df_obj2 = pd.DataFrame(np.random.rand(3,3),columns=['a','b','c'])

df_obj1+df_obj2

# add(要对齐运算的数据对象,对应位置默认值)对齐运算
# 对未对齐的数据填充,,然后进行运算

ser_obj1.add(ser_obj2,fill_value=0)

# 对未对齐的数据填充,然后进行运算

df_obj1.add(df_obj2,fill_value=0)

ser_obj3 = ser_obj1+ser_obj2

# 把空数据NaN替换为正常数据

# 返回一个替换后Series对象

ser_obj4 = ser_obj3.fillna(0,inplace=True)

print(ser_obj4)

df_obj3 = df.obj1+df_obj2

# inplace=True 就地替换,不返回结果,直接将df对象中的数据进行替换
# 替换-1或者False 表示非正常数据

df_obj3.fillna(-1,inplace=True)

# numpy中的函数  操作数据的函数

df_obj = pd.DataFrame(np.random.randn(4,5))

# 求绝对值 absolute
# 将函数应用到地方中的每一个元素

print(np.abs(df_obj))

ser = pd.Series(range(10))

# print(ser.max())
# apply() 函数 将某个函数应用到行数据或列数据
# 默认为0 是列轴向

f = lambda x:x.max()

print(df_obj.apply(f))

print(df_obj.apply(lambda x:x.min()))

# 指定轴向为行 axis参数指定轴向 0(列轴向) 1(行轴向)

print(df_obj)

print(df_obj.apply(lambda x:x.min().axis = 1))

# applymap() 将函数作用到df中的每一个元素上

print(df_obj.applymap(lambda x:abs(x)))

# 绝对值 保留小数点后2位

print(df_obj.applymap(lambda x:'%.2f'%abs(x)))

# 排序 sort_index 根据索引排序
ser_obj = pd.Series(range(10,15),index=np.random.randint(5,size=5))

print(ser_obj)

ser_obj.sort_index()

# sort_value 根据值排序

df = dp.DataFrame(np.random.randn(3,4),

    index=np.random.randint(3,size=3),

    columns=np.random.randint(4,size=4))

print(df)

# 不指定排序轴向,默认按照行索引排序
# ascending 排序规则
# axis=0 按照行排序 axis=1按照列  与上方情况相反

df.sort_index(ascending=False,axis=1)

# 按照值排序

# sort_value

df = pd.DataFrame(np.random.randn(3,4),index=range(1,4),columns=range(1,5))

# 按照值排序
# by 指定按照哪一列进行排序

print(df.sort_values(by=2,ascending=False))

# 指定按照多列进行排序 优先按照第一个指定的列进行排序

print(df.sort_values(by=[2,3]))

# fillna() 填充缺失数据的
# dropna() 丢弃缺失数据

df = pd.DataFrame([

np.random.randn(4),[1,2,np.nan,np.nan],[3,np.nan,np.nan,np.nan],['hello','world','test','qq']

])

# 获取布尔类型的索引,判断数据中哪些为空数据

print(df.isnull())

# df.fillna(1)
# dropna()丢弃缺失数据,默认按照行丢弃缺失数据,如果该行有NaN数据,则丢弃该行数据
# axis=0 按行丢弃  axis=1 按列丢弃空数据

df.dropna(axis=1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值