数据基础操作

索引和列名

索引

建立索引

一般会在建立Dataframe或Series是直接设定索引

obj = pd.Series([4, 7, 9, 10], index=['one', 'two', 'three', 'four']) 
obj
'''
one       4
two       7
three     9
four     10
dtype: int64
'''

data = {'stata': ['qwf', 'chiwetena', 'vwe', 'wetwe'],
    'pop': [3, 4, 5, 6],
    'year': [190, 200, 201, 198]}
data_f = pd.DataFrame(data, index=data['stata'])  # 生成的Dataframe会自动分配索引
data_f
'''
			pop	stata		year
qwf			3	qwf			190
chiwetena	4	chiwetena	200
vwe			5	vwe			201
wetwe		6	wetwe		198
'''

##修改索引
data_f.index = data['year']
data_f
'''
	pop	stata		year
190	3	qwf			190
200	4	chiwetena	200
201	5	vwe			201
198	6	wetwe		198
'''

使用索引

两种方式:iloc,loc,前者是下标索引,后者是名字索引

frame = pd.DataFrame(np.arange(12).reshape(4, 3),
                 index=['one', 'two', 'three', 'four'],
                 columns=['hoin', 'hui', 'dfs'])
frame
'''
  	hoin	hui	dfs
one	0	1	2
two	3	4	5
three	6	7	8
four	9	10	11
'''
print(frame.loc[['one', 'two'], ['hoin', 'hui']])
'''
   hoin  hui
one     0    1
two     3    4
'''
print(frame.iloc[[1, 2], [0, 1, 2]]) 
'''
     hoin  hui  dfs
two       3    4    5
three     6    7    8
'''
print(frame.iloc[2])  # 仅取出第3行的数据
'''
hoin    6
hui     7
dfs     8
Name: three, dtype: int32
'''
frame.loc['one']# 仅取出one行的数据
'''
hoin    0
hui     1
dfs     2
Name: one, dtype: int32
'''
print(frame.iloc[:2, [1,2]]) # loc索引切片包含,但是iloc切片索引不包含(索引为连续数据时)
'''
 hui  dfs
one    1    2
two    4    5
'''

列名

在建立series和Datafram时通过columns字段写入

筛选需要的列

frame_1 = pd.DataFrame(frame,columns=['hoin','dfs'])
frame_1
'''
	hoin	dfs
one	0	2
two	3	5
three	6	8
four	9	11
'''

修改列名

frame_1.rename(columns={'hoin': 'hoin_11'},inplace=True)
frame_1
'''
hoin_11	dfs
one	0	2
two	3	5
three	6	8
four	9	11
'''

数据格式调整

修改数据类型
frame_1[['hoin_11']] = frame_1[['hoin_11']].astype(str)  # 转字符串
print(frame_1.dtypes)
'''
hoin_11    object
dfs         int32
dtype: object
'''
修改数据内容
data= pd.DataFrame([[' wf' , ' qwfqw', 'qwf'],['qwf ', 'fff    ', ' fqwfasf']],
                     index=[1,2],
                     columns=['aaa', 'bbb', 'ccc'])
for i in range(len(data.columns)):
    data.iloc[:,i] = data.iloc[:,i].str.strip()
print(data)
'''
   aaa    bbb      	 ccc
1  wf  	  qwfqw      qwf
2  qwf    fff  	  	 fqwfasf
'''

替换字符
data.aaa = data.aaa.replace("qwf","sssss")
print(data)
'''
   aaa    bbb      ccc
1     wf  qwfqw      qwf
2  sssss    fff  fqwfasf
'''

排序

data = pd.read_csv("./data.csv",encoding='gbk')
###按索引排序
print(data.head())###正序
print(data.sort_index(ascending=False).head())###倒序
###按列值排序
print(data.sort_values(["身高", "体重" ],ascending=False).head())

数据拼接

行堆叠

concat(objs, axis=0, join=‘outer’, join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False,copy=True)
参数说明:

  • objs: 拼接的series或dataframe
  • axis:拼接轴方向,默认为0,沿行拼接;若为1,沿列拼接
  • join:默认外联’outer’,拼接另一轴所有的label,缺失值用NaN填充;内联’inner’,只拼接另一轴相同的label;
  • join_axes: 指定需要拼接的轴的labels,可在join既不内联又不外联的时候使用
  • ignore_index:对index进行重新排序
  • keys:多重索引,便于区分来源表
  • sort: 按值排序

列拼接

merge(left_data,right_data,on,left_on,right_on,suffixes,how,left_index,right_index)
参数说明:

  • left_data/right_data: 需要合并的两部分数据,左右顺序不同,结果有可能不一样,具体要结合how来看
  • on: 连接键,当两个表的连接键名一样,可以直接用on,而不用left_on和right_on,可以是单键或多键
  • left_on/right_on: 如果两个表键名不一样,则分别指出,可以是单键或多键
  • suffixes: 如果两边键名相同的,想要做区分,可以使用此参数指定区分格式,如suffixes=(’_left’, ‘_right’)
  • how:指定连接的方式,分为inner,left, right, outer,与SQL中的join一致,默认为Inner
  • left_index/right_index: 如果需连接的键是索引,就不用left_on/right_on,而是用这两个,也可以一个用left_on,一个用right_index,两都可结合使用

取值

字典

a={'name':'tony','sex':'male'}
a['name']## 用key不存在时报错
'''
'tony'
'''
a.get('name')##用key不存在时,a.get(‘age’) 不会产生错误,解析器返回值如果存在就返回相应的value, 如果不存在就返回None.
'''
'tony'
'''

Dataframe

在这里插入图片描述

抽取方法抽取的数据类型
1行 -‘展昭’ 1 行df.loc[‘展昭’]Series 对象
1行 - 第2行df.iloc[2]Series 对象
指定多行 - ‘王宽’, ‘展昭’ 2行df.loc[[‘王宽’, ‘展昭’]DataFrame 对象
指定多行 - 第1行 和 第2行df.iloc[[0, 2]DataFrame 对象
连续多行 - 从’王宽’到’展昭’ 行df.loc[‘王宽’:‘展昭’]DataFrame 对象
连续多行 - 从第1行到’雅雅’ 行df.loc[:‘雅雅’:]DataFrame 对象
连续多行 - 从第1行到第2行df.iloc[0:2]DataFrame 对象
连续多行 - 从第3行到结尾df.iloc[2::]DataFrame 对象
1列 - ‘英文’ 1列df[[‘英文’]]DataFrame 对象
1列 - ‘英文’ 1列df[‘英文’]Series 对象
1列 - "英文"列df.loc[:, ‘英文’]Series 对象
1列 - 第1列df.iloc[:, [1]]DataFrame 对象
1列 - 第4列df.iloc[:, 3]Series 对象
指定多列 - ‘英语’和’语文’ 2列df[[‘英文’, ‘语文’]]DataFrame 对象
指定多列 - ‘英语’和’语文’ 2列df.loc[:, [‘英文’, ‘语文’]]DataFrame 对象
指定多列 - 第1列 和 第2列 2列df.iloc[:, [0, 1]]DataFrame 对象
连续多列 - 从’英文’列到最后1列df.loc[:, ‘英文’:]DataFrame 对象
连续多列 - 从第1列到第3列df.iloc[:, :3]DataFrame 对象
单元格 - 值df.loc[‘王宽’, ‘语文’]具体看单元格里的值
行列 - '王宽’行,'语文’列df.loc[[‘王宽’], [‘语文’]]DataFrame 对象
行列 - '王宽’行,'数学’和’语文’列df.loc[[‘王宽’], [‘数学’, ‘语文’]]DataFrame 对象
单元格 - 值df.iloc[1, 2]具体看单元格里的值
行列 - 第2行的第3列df.iloc[[1], [2]]DataFrame 对象
连续行列 - 第3列的第2行到最后1行df.iloc[1:, [2]]DataFrame 对象
连续行列 - 第2行的第1列和第3列df.iloc[1:, [0, 2]]DataFrame 对象

data.aaa,data[‘aaa’],data.loc[:,‘aaa’],data.iloc[:,0]的结果相同,都是aaa列数据,返回Series
data.loc[:,[‘aaa’]],data.iloc[:,[0]]的结果相同,都是aaa列数据,返回DataFrame

Series

import pandas as pd
import numpy as np
s = pd.Series([9, 'zheng', 'beijing', 128, 'usa', 990], index=[1,2,3,'e','f','g'])
print(s)
print(s['f'])    # 根据索引找出值,结果:usa,类型为str
'''
str
'''
print(s[4:5]) ##返回类型为Series
'''
f    usa
dtype: object
'''

s = {"ton": 20, "mary": 18, "jack": 19, "jim": 22, "lj": 24, "car": None}
sa = pd.Series(s, name="age")
print(sa[sa>19])
'''
jim    22.0
lj     24.0
ton    20.0
Name: age, dtype: float64
'''
print(sa>sa.median())### 判断是否大于中位数
'''
car     False
jack    False
jim      True
lj       True
mary    False
ton     False
Name: age, dtype: bool
'''

array

对于array数据进行切片应注意:1)切片时指定各个维度坐标时,无论位置数量是否为1,都应尽量采用范围表示的形式,以避免产生维度丢失影响后续的计算结果。2)对于不连续切片可采用np.take()函数进行切片,既可实现不连续切片也可以保持矩阵原有的维度。

import numpy as np
a = np.array([1, 2, 3, 4, 5]) # 创建一维数组
print(a)
#>>>array([1, 2, 3, 4, 5]) # 输出一维array,数据外面只有一层方括号‘[]’
# 提取第一个元素
print(a[0]) 
#>>>1
# 提取最后一个元素
print(a[-1]) 
#>>>5
# 提取连续范围 第0~2 个元素
print(a[:3]) 
#>>>[1 2 3]
# 提取第3个以后的元素(包括第3个元素)
print(a[3:]) 
#>>>[4 5]
# 提取所有元素
print(a[:])
#>>>[1 2 3 4 5]
# 提取任意不连续的元素
print(a.take([1,3,4])) 
#>>>[2 4 5]

 
# 生成2维数组
a=np.arange(10).reshape(2,5)
print(a) # 打印出a
>>>[[0 1 2 3 4]
 	[5 6 7 8 9]]
# 提取第一行,使用范围切片形式,结果仍为2维
print(a[0:1,:]) 
>>>[[0 1 2 3 4]]
# 提取第一行中的1,3,4三个位置元素组成的2维数组
print(a.take([0],0))
#>>>[[0 1 2 3 4]]
print(a.take([0],0).shape)
#>>>(1, 5)
print(a.take(0,0).shape)
#>>>(5,)
print(a.take([0],0).take([1,3,4],1))
#>>>[[1 3 4]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值