文章目录
变量类型的转换
Pandas 支持的数据类型
具体类型是 Python, Numpy 各种类型的混合,可以下分的更细:
- float
- int
- string
- bool
- datetime64[nsr] datetime64[nsr,tz] timedelta[ns]
- category
- object
df.dtypes :査看各列的数据类型
df.dtypes
在不同数据类型间转换
df.astype(
dtype :指定希望转换的数据类型,可以使用 numpy 或者 python 中的数据类型: int/float/bool/str
copy = True :是否生成新的副本,而不是替换原数据框
errors = 'raise' : 转换出错时是否抛出错误,raise/ ignore )
#将df里所有的列转换成str
df.astype('str')
df.astype('str').dtypes
#修改某一列数据的数据类型
df.column.astype ('str')
#转换错误
df.astype('int', errors = 'ignore').dtypes
明确指定转换类型的函数:
- 旧版本方法:
- pd.to_datetime ()
- pd.to_timedelta ()
- pd.to_numeric ()
- df.to_string()
可以通过 df. apply 来批量逬行多列的转换
pd. to_numeric (df .cloumn)
#转换单列
pd.to_numeric(df.软件)
#选择多列进行转换
df [['cloumn1','cloumn2']].astype('str').apply(pd. to_numeric).dtypes
建立索引
新建数据框时建立索引
所有的数据框默认都已经使用从 0 开始的自然数索引,因此这里的"建立”索引指的是自定义索引
df = pd.DataFrame( {'varl' : 1.0, ' var2' :[1,2,3,4], 'var3' : ['test', 'python','test','hello'] , 'var4' : 'cons'} , index =[0,1,2,3])
'''
varl var2 var3 var4
0 1.0 1 test cons
1 1.0 2 python cons
2 1.0 3 test cons
3 1.0 4 hello cons
'''
读入数据时建立索引
使用现有列
df = pd.read_csv ("filename",index_col="column”)
使用复合列
df = pd.read_csv ("filename", index_col=[0,1..])
指定某列为索引列
df.set_index(
keys :被指定为索引的列名,复合索引用 list:格式提供
drop = True :建立索引后是否删除该列
append = False :是否在原索引基础上添加索引,默认是直接替换原索引
inplace = False :是否直接修改原数据框 )
# 示例
df_new = df.set_index (keys=['学号','性别'],drop = False)
df_new = df.set_index (keys='学号',append=True, drop=False)
将索引还原变量列
df.reset_index(
drop = False :是否将原索引直接删除,而不是还原为变量列
inplace = False :是否直接修改原数据框
)
df.set_index (['col1','col2','col3'])
将索引全部还原为变量
df.reset_index ()
是否删除 index 列
df.reset_index (drop=True)
引用和修改索引
引用索引
- 注意:索引仍然是有存储格式的,注意区分数值型和字符型的引用方式
df.index
修改索引
修改索引名
本质上和变量列名的修改方式相同
df = pd.DataFrame({'name':['zs','ls','ww'],'level':['vip1','vip2','pm']})
'''
name level
0 zs vip1
1 ls vip2
2 ww pm
'''
df.index.name='sno'
'''
sno name level
0 zs vip1
1 ls vip2
2 ww pm
'''
示例用法
df2 = pd.read_excel('stu_data.xlsx')
df3 = df2.set_index(keys = '学号')
df4 = pd.read_excel('stu_data.xlsx')
df5 = df2.set_index(keys = ['学号','性别'])
df5.index.names = ['no','sex']
df5.index.names=[None,None]
修改索引值
df.index = ['a', 'b', 'c']
更新索引
reindex 则可以使用数据框中不存在的数值建立索引,并据此扩充
新索引值对应的索引行/
列,同时进行缺失值填充操作。
df.reindex(
**labels