版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36636519/article/details/86033230
如下图是pandas的Dataframe清洗数据步骤,包括数据行列选取,赋值,更改列名集重建索引的思维导图:
一、数据选取-普通行列总结:
df[col] # 根据列名,并以Series的形式返回列
df[[col1, col2]] # 以DataFrame形式返回多列
df.loc[‘index_one’] # 按索引选取数据
df.iloc[0] # 按位置选取数据
df.iloc[0,:] # 返回第一行v
df.iloc[0,0] # 返回第一列的第一个元素
import numpy as np
import pandas as pd
data = pd.read_csv("Y:\\DataSet\\Pandas\\311-service-requests.csv",low_memory=False)
# 1、以DataFrame形式返回多列
data[["Unique Key","Created Date","Closed Date"]]
Unique Key Created Date Closed Date
0 26589651 10/31/2013 02:08:41 AM NaN
1 26593698 10/31/2013 02:01:04 AM NaN
2 26594139 10/31/2013 02:00:24 AM 10/31/2013 02:40:32 AM
3 26595721 10/31/2013 01:56:23 AM 10/31/2013 02:21:48 AM
4 26590930 10/31/2013 01:53:44 AM NaN
# 2、 df.loc[[index1,index2]] # 按索引取数据(行数据)
data.loc[[1,2]]
Unique Key Created Date Closed Date Agency Agency Name
1 26593698 10/31/2013 02:01:04 AM NaN NYPD New York City Police Department
2 26594139 10/31/2013 02:00:24 AM 10/31/2013 02:40:32 AM NYPD New York City Police Department
# data.iloc[[0,1]] # 与 data.loc[[0,1]] 效果一样
# data.iloc[0,1] # 返回第一列的第二个元素
'10/31/2013 02:08:41 AM'
loc | loc取数表达式 | iloc | iloc取数表达式 |
---|---|---|---|
单个,取index的值,与索引位置不同 | data_test.loc[“A”] | 选取数据的所在行数位置,只能取数字 | data_test.iloc[0] |
array,多个index值 | data_test.loc[[“A”,“B”,“C”] | array,选取多行索引位置值 | data_test.iloc[[0,1,2] |
加入一个切片 | data_test.loc[“A”:“C”]/(注:这个包含ABC行) | 加入一个切片 | data_test.iloc[0:3] (注:不包含索引位置为3的行) |
行,列标签;定位单值 | data_test.loc[“A”,“name”] | 行,列索引位置,定位单值 | data_test.iloc[0,0] |
行或列标签是切片 | data_test.loc[“A”:“C”,“name”] | 行货列标签是切片 | data_test.iloc[0:3,0] |
接受条件,进行选择 | data_test.loc[data_test[“math”]>60] | ------ | ------- |
接受一个boolean的array,按顺序,是真则显示 | data_test.loc[[True,False,False,True]] | ------ | ------- |
总结
1、 loc和iloc函数都是用来选择某行的,iloc与loc的不同是:iloc是按照行索引所在的位置来选取数据,参数只能是整数。而loc是按照索引名称来选取数据,参数类型依索引类型而定;
二、 数据选取-按条件筛选行列 总结
2.1 逻辑符号
符号 | 表示 |
---|---|
& | 与 |
| | 或 |
^ | 非 |
df[df[col1] > 0.5] | # 选择col1列的值大于0.5的行 |
---|---|
df[df[col1] > 0.5 & df[col1] < 1] | 选择col列值小于1 并且大于0.5的行 |
df[df.weight==5].reset_index() | 选择名为weight的列值等于5的所有行,并且重置索引 |
car[car.appname.str.contains(“生活”)] | 选择appname列中含有“生活”的行 |
三、重建索引和更改列名总结
3.1 重建索引
1、reset_index() 显示效果:会产生新的索引,但是旧的索引同时同时存在
reset_index(drop=True) # 产生新的索引,删除旧索引
2、 set_index()
设置指定某(些)列为索引
3.2 改列名:
方法1
a.columns = [‘a’,‘b’,‘c’]
方法2
a.rename(columns={‘A’:‘a’, ‘B’:‘b’, ‘C’:‘c’}, inplace = True)