pandas高级操作--数据类型转换
- 一、数据类型转换
- 1.1、数据加载时指定数据类型
- 1.2、astype()类型转换
- 二、数据排序
- 2.1、索引排序
- 2.2 数据排序
一、数据类型转换
1.1、数据加载时指定数据类型
# 对所有字段指定统一类型
df = pd.DataFrame(data, dtype='str')
# 对每个字段分别指定
df = pd.read_excel('team.xlsx', dtype={'team': 'string', 'Q1': 'int32'})
1.2、astype()类型转换
astype()是最常见也是最通用的数据类型转换方法,一般我们使用astype()操作数据类型转换就可以了。
df['Q1'].astype('float32').dtype # dtype('float32')
df.astype({'Q1':'int32', 'Q2':'float64'}).dtypes
'''
team object
Q1 int32
Q2 float64
Q3 int64
Q4 int64
'''
以下是一些使用示例:
df.index.astype('int64') # 索引类型转换
df.astype('int32') # 所有数据转换为int32
当数据的格式不具备转换为目标类型的条件时,需要先对数据进行处理。例如“92.7%”是一个字符串,要转换为数字,要先去掉百分号:
data.rate.apply(lambda x: x.replace('%', '')).astype('float') / 100
二、数据排序
2.1、索引排序
df.sort_index()实现按索引排序,如需降序,传入ascending=False,如需修改原df,传入inplace=True。
按列索引排序:df.sort_index(axis=1, ascending=False, inplace=True)。
df.reindex()指定自己定义顺序的索引,实现行和列的顺序重新定义:
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
}, index=['a', 'b', 'c'])
# 按要求重新指定索引顺序
df.reindex(['c', 'b', 'a'])
# 指定列顺序
df.reindex(['B', 'A'], axis=1)
2.2 数据排序
数据值的排序主要使用sort_values(),Series和DataFrame都支持此方法。
df.Q1.sort_values()
# 可以指定排序方式,下例先按team升序排序,如遇到相同的team再按name降序排序
df.sort_values(by=['team', 'name'], ascending=[True, False])
s.sort_values(inplace=True) # 修改数据使生效
s.sort_values(na_position='first') # 空值在前
# df按指定字段排序
df.sort_values(by=['team'])
df.sort_values('team')