python - pandas 之 dataframe - 数据清洗转换合集

 

目录

1.dataframe查看属性

2.dataframe转换数据类型

3.dataframe缺失值判断处理

4.修改索引index和列名

 5.index与列名互转

6.replace替换值 

7.sort_values排序 

8.Series 转 Dataframe

9.Series 转 List


1.dataframe查看属性

DataFrame.index DataFrame的索引(行标签)。
DataFrame.columns DataFrame的列标签。
DataFrame.dtypes 返回DataFrame中各列的dtypes。
DataFrame.ftypes 返回DataFrame中的ftypes(稀疏/密集和dtype的指示)。
DataFrame.get_dtype_counts() 统计各dtypes的数量。
DataFrame.get_ftype_counts() 统计各ftypes的数量。
DataFrame.select_dtypes() 选择dataFrame中指定dtypes的列。
DataFrame.values 返回DataFrame的Numpy表示。
DataFrame.get_values() 将稀疏值转换为密集后返回一个ndarray。
DataFrame.axes 返回表示DataFrame行列索引。
DataFrame.ndim 返回表示dataframe维数,2维居多.
DataFrame.size 返回dataframe对象中的元素数。
DataFrame.shape 返回表示DataFrame维度的元组。
DataFrame.memory_usage() 以字节为单位返回每列的内存使用情况。
DataFrame.empty 判断DataFrame对象是否为空。
DataFrame.is_copy 返回副本。
DataFrame.T 转置,index与columns对调
df.info() 打印DataFrame对象的信息
df.head(i) 显示前 i 行数据
df.tail(i) 显示后 i 行数据
df.describe() 显示数据的数量、缺失值、最小最大数、平均值、分位数等信息

 

2.dataframe转换数据类型

DataFrame.astype(dtype) 将pandas对象转换为指定的dtype dtype。
DataFrame.convert_objects() (DEPRECATED)尝试推断对象列的更好dtype。
DataFrame.infer_objects() 尝试推断对象列的更好的dtypes。

(1)DataFrame.astype()
astype实现强制转换
#单列转换为浮点数
df['col2'] = df['col2'].astype('float64')
#多列转换为浮点数
df[['two', 'three']] = df[['two', 'three']].astype(float)
各种数据类型介绍:
Data type Description
bool_ Boolean (True or False) stored as a byte
int_ Default integer type (same as C long; normally either int64 or int32)
intc Identical to C int (normally int32 or int64)
intp Integer used for indexing (same as C ssize_t; normally either int32 or int64)
int8 Byte (-128 to 127)
int16 Integer (-32768 to 32767)
int32 Integer (-2147483648 to 2147483647)
int64 Integer (-9223372036854775808 to 9223372036854775807)
uint8 Unsigned integer (0 to 255)
uint16 Unsigned integer (0 to 65535)
uint32 Unsigned integer (0 to 4294967295)
uint64 Unsigned integer (0 to 18446744073709551615)
float_ Shorthand for float64.
float16 Half precision float: sign bit, 5 bits exponent, 10 bits mantissa
float32 Single precision float: sign bit, 8 bits exponent, 23 bits mantissa
float64 Double precision float: sign bit, 11 bits exponent, 52 bits mantissa
complex_ Shorthand for complex128.
complex64 Complex number, represented by two 32-bit floats (real and imaginary components)
complex128 Complex number, represented by two 64-bit floats (real and imaginary components)

(2)DataFrame.infer_objects()
软转换——类型自动推断
df = df.infer_objects()

 

3.dataframe缺失值判断处理

(1)df缺失值判断

DataFrame.isna() 检测缺失值。
DataFrame.notna() 检测现有(非缺失)值。
dataframe.isnull() 检查DataFrame对象中的空值,并返回一个Boolean数组
dataframe.notnull() 检查DataFrame对象中的非空值,并返回一个Boolean数组
data[0].isnull().all() 判断第1列是否全为nan
data[0].isnull().any() 判断第1列是否有nan
pd.isnull(data.loc[1,1]) 判断第2行第2列单元格是否为nan
pd.isnull(x)  #判断某值是否为NaN值
df['open'].isnull().any() #判断open列是否有 NaN
df['open'].isnull().all() #判断open列是否全部为NaN
df.isnull().all() #判断open列是否全部为NaN
#判断df某值是否为空值
def check_nan(x):
    if pa.isnull(x):
        print('nan')

(2)df.fillna填充缺失值

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
value 用于填充缺失值的标量值或字典对象
metheod 插值方式,如下几样:
pad/ffill:用前一个非缺失值去填充该缺失值
backfill/bfill:用下一个非缺失值填充该缺失值
None:指定一个值去替换缺失值

df.fillna(' ',inplace=True) #df用空格填充nan
data[1].fillna(' ',inplace=True) #df第2列用空格式填充nan
data[0:4].fillna(' ',inplace=True) #df的1至4用空格式填充
data.loc[0:4,:].fillna(' ',inplace=True) #df的1至4用空格式填充
df.fillna(value={0:10,1:20,2:30}) #对第一列nan值赋10,第二列赋值20,第三行赋值为30
df.fillna(method='ffill') #在列方向上以前一个值作为值赋给NaN

(3)df.dropna删除nan的行或列

1)删除全部NaN的行
df.dropna(axis=0,how='all',inplace=True)
#省略axis时默认为行
df.dropna(how='all',inplace=True)

2)删除某列为空的行
删除第0、5、6、7列都为空的行
df.dropna(axis='index', how='all', subset=[0,5,6,7])
df.dropna(subset=['列名'],inplace=True)

3)删除表中含有任何NaN的行
df.dropna(axis=0,how='any',inplace=True)

4)删除表中全部为NaN的列
df.dropna(axis=1,how='all',inplace=True)

5)删除表中含有任何NaN的列
df.dropna(axis=1,how='any',inplace=True)

 

4.修改索引index和列名

(1)把列作为索引

语法:
set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False) 
keys : column label or list of column labels / arrays
drop : boolean, default True
Delete columns to be used as the new index
append : boolean, default False
Whether to append columns to existing index 是否向现有索引追加列
inplace : boolean, default False
Modify the DataFrame in place (do not create a new object)
verify_integrity : boolean, default False
Check the new index for duplicates. Otherwise defer the check until necessary. Setting to False will improve the performance of this method

1)设置单层索引
data = mysl_cusr.fetchall()
df=DataFrame(list(data),columns['department','purchase_date','sales_amount','Sales_volume'])
df=df.set_index('purchase_date')

2)设置层次索引
df=df.set_index(['department','purchase_date'])

3)样例
indexed_df = df.set_index(['A', 'B'])                    #层次索引
indexed_df2 = df.set_index(['A', [0, 1, 2, 0, 1, 2]])    #层次索引
indexed_df3 = df.set_index([[0, 1, 2, 0, 1, 2]])         #层次索引

(2)修改索引名或列名

可以直接修改,可使用rename函数,后者较为灵活
1)修改索引名
data.index=['Ohio','Colorado','Utah','New York']
#使用rename函数
import numpy as np, pandas as pd
data=pd.DataFrame(np.arange(16).reshape((4,4)),columns=['one','two','three','four'])
dict1={0:'Ohio',1:'Colorado',2:'Utah',3:'New York'}
data.rename(index=dict1,inplace=True)
print(data)

2)修改列名
data.columns =['a','b','c','d']
#必须重写出全部列名
#使用rename函数
import numpy as np, pandas as pd
data=pd.DataFrame(np.arange(16).reshape((4,4)),index=['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four'])
data.rename(columns={'one':'a', 'two':'b','three':'c','four':'d'}, inplace = True)
print(data)

 

 5.index与列名互转

(1)set_index列变索引

  • DataFrame可以通过set_index方法,可以设置单索引和复合索引。 
  • DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False) 
  • append添加新索引,drop为False,inplace为True时,索引将会还原为列
  • df.set_index('date')
  • df.set_index('date', inplace=True) # column 改为 index

(2)reset_index索引变列

  • reset_index可以还原索引,从新变为默认的整型索引 
  • DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”) 
  • level控制了具体要还原的那个等级的索引 
  • drop为False则索引列会被还原为普通列,否则会丢失
#索引改成列
df.reset_index()
#将复合索引中的一个改成列
df.reset_index(level=0, inplace=True) #第一个index 改为 column
df.reset_index(level=['tick', 'obs']) #将复合索引的中'tick', 'obs'改成column

(3)reindex修改索引

  • pandas调用reindex方法后净会根据新索引进行重排,如果某个索引值当前不存在,就会引入
  • 缺失值;可以通过fill_value参数填充默认值,也可以通过method参数设置填充方法;
  • frame.reindex(index=['a', 'b', 'c', 'd'], method='ffill', columns=states)
  • obj.reindex(['a','b','c','d','e'],fill_value=0)
index_list=[y for y in range(1,17)]
dft2.rename(index_list)
reindex方法的methon参数的选项:
ffill或pad              前向填充(或搬运)值
bfill或backfill         后向填充(或搬运)值

 

6.replace替换值 

DataFrame.replace(self, to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')

#单值替换
df.replace('?',np.nan) #用np.nan替换?
df.replace({'?':'NA'}) #用NA替换?

#按列指定单值替换
df.replace({'EMPNO':'?'},np.nan)#用np.nan替换EMPNO列中?
df.replace({'EMPNO':'?','ENAME':'.'},np.nan)#用np.nan替换EMPNO列中?和ENAME中.

#多值替换
df.replace(['?','.','$'],[np.nan,'NA','None'])##用np.nan替换?用NA替换. 用None替换$
df.replace({'?':'NA','$':None})#用NA替换? 用None替换$
df.replace({'?','$'},{'NA',None})#用NA替换? 用None替换$

#正则替换
df.replace(r'\?|\.|\$',np.nan,regex=True)#用np.nan替换?或.或$原字符
df.replace([r'\?',r'\$'],np.nan,regex=True)#用np.nan替换?和$
df.replace([r'\?',r'\$'],[np.nan,'NA'],regex=True)#用np.nan替换?用NA替换$符号
df.replace(regex={r'\?':None})

 

7.sort_values排序 

(1)df.sort_values()行或列排序
sort_values既可以列排序,也可以行排序
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')
axis:{0 or 'index’, 1 or 'columns’}, default 0
# 默认按照索引排序,即纵向排序,如果为1,则是横向排序
by:str or list of str;
# 如果axis=0,那么by="列名";如果axis=1,那么by="行名";
ascending:布尔型,True则升序
# 可以是[True,False],即第一字段升序,第二个降序
inplace:布尔型
# 是否用排序后的数据框替换现有的数据框
kind: default quicksort
# 排序方法,{'quicksort’, 'mergesort’, 'heapsort’},
na_position : default last
# 默认缺失值排在最后面 {'first’, 'last’}

#实现按qty排序
data.sort_values(by='qty',axis=0,ascending=False)
#实现按asin与qty排序,降序
data.sort_values(by=['asin','qty'],axis=0,ascending=False)
#依据第一列排序,并将该列空值放在首位
df.sort_values(by=['col1'],na_position='first')
#依据第二、三列,数值降序排序
df.sort_values(by=['col2','col3'],ascending=False)
df.sort_values(by=['col2','col3'],ascending=[False,True])
#根据第一列中数值排序,按降序排列,并替换原数据
df.sort_values(by=['col1'],ascending=False,inplace=True,na_position='first')

(2)sort_index() 行排序
sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)
axis:0按照行名排序;1按照列名排序
level:默认None,否则按照给定的level顺序排列---貌似并不是,文档
ascending:默认True升序排列;False降序排列
inplace:默认False,否则排序之后的数据直接替换原来的数据框
kind:默认quicksort,排序的方法
na_position:缺失值默认排在最后{"first","last"}
by:按照那一列数据进行排序,但是by参数貌似不建议使用
data.sort_index(by=['asin','qty'],axis=0,ascending=False)
#排序后替换原来的数据
data.sort_index(by=['asin','qty'],axis=0,ascending=False,inplace=True)

 

8.Series 转 Dataframe

(1)只用value值生成 
import pandas as pd 
_dict = {'asin_count':s1.values}
asin_count = pd.DataFrame(_dict)

(2)用index 与 value 生成 
_dict = {'aisn':s1.index,'asin_count' : s1.values}
asin_count = pd.DataFrame(_dict)

 

9.Series 转 List

#转index为list
s1.index.tolist()
s1.index.to_list()
#转value为list
s1.values.tolist()
s1.values.to_list()
s1.tolist()
s1.to_list()

 

 

 

 

 

 

 

 

 

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值