数据转置
行列标签一起转置,利用.T实现
# -*- coding: utf-8 -*-
import pandas as pd
d = {'col1': [1,2,3], 'col2': [4,5,6],'col3':[7,8,9]}
df = pd.DataFrame(data=d)
print(df)
print('-----------')
print(df.T)
col1 col2 col3
0 1 4 7
1 2 5 8
2 3 6 9
-----------
0 1 2
col1 1 2 3
col2 4 5 6
col3 7 8 9
数据修改
1、通过直接索引修改整行和列
2、使用df.at修改单个值(建议新值和旧值数据类型应保持一致)
3、参考上一节loc和iloc的用法,使用df.loc或者df.iloc来灵活赋值
# -*- coding: utf-8 -*-
import pandas as pd
d = {'col1': [1,2,3], 'col2': [4,'66',6],'col3':[7,8,9]}
df = pd.DataFrame(data=d)
print(df)
print('------------------')
df['col1'] = 'aaa' # 直接修改一列
print(df)
print('-------------------')
df.at[1,'col2'] = 'py' #索引为1的行的col2列
print(df)
print('-----------')
# df.loc[[1]]['col1'] = 'bbb' # 这样是错的,不生效
df.loc[[1],'col1'] = 'bbb' # 这样是对的
print(df)
col1 col2 col3
0 1 4 7
1 2 66 8
2 3 6 9
------------------
col1 col2 col3
0 aaa 4 7
1 aaa 66 8
2 aaa 6 9
-------------------
col1 col2 col3
0 aaa 4 7
1 aaa py 8
2 aaa 6 9
-----------
并未变化
col1 col2 col3
0 aaa 4 7
1 bbb py 8
2 aaa 6 9
数据删除
1、del
2、drop函数
drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
常用操作
df.drop(['a', 'd'], axis=0) 删除索引为a、d的行,默认axis=0
df.drop(['a', 'd'], axis=1) 删除索引为a、d的列
df.drop(['a', 'd'], axis=1 ,inplace=False) 生成新df,不改变原df。默认是False
df.drop(['a', 'd'], axis=1 ,inplace=False) 改变原df
# -*- coding: utf-8 -*-
import pandas as pd
d = {'col1': [1,2,3], 'col2': [4,'66',6],'col3':[7,8,9]}
df = pd.DataFrame(data=d)
print(df)
print('------------------')
# del删除col1列
del(df['col1'])
print(df)
print('------------')
# drop删除索引为1的行
res = df.drop([1])
print(res)
print('-------------')
#删除索引为col2的列
df.drop(['col2'],axis=1,inplace=True)
print(df)
col1 col2 col3
0 1 4 7
1 2 66 8
2 3 6 9
------------------
col2 col3
0 4 7
1 66 8
2 6 9
------------
col2 col3
0 4 7
2 6 9
-------------
col3
0 7
1 8
2 9
对齐(相加)
# -*- coding: utf-8 -*-
import pandas as pd
d1 = {'col1': [1, 2], 'col2': [3, 4]}
d2 = {'col1': [4, 8], 'col2': [7, 9],'col3':[1,2]}
df1 = pd.DataFrame(data=d1)
df2 = pd.DataFrame(data=d2)
df = df1 + df2
print(df)
col1 col2 col3
0 5 10 NaN
1 10 13 NaN
排序
1)按值排序
sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
常用参数:
by:字符串或者列表;如果axis=0,那么by="列名";如果axis=1,那么by="行名"。
axis:默认值0,默认按照列排序,即纵向排序;如果为1,则是横向排序。
ascending:布尔型,True则升序,如果by=['列名1','列名2'],则该参数可以是[True, False],即第一字段升序,第二个降序。
inplace:布尔型,默认False代表返回新的对象。
na_position:{‘first’, ‘last’}, 默认是‘last’,默认缺失值排在最后面。
单列排序及多列排序
# -*- coding: utf-8 -*-
import pandas as pd
df = pd.DataFrame({'b':[1,2,3,2],'a':[4,3,2,1],'c':[1,3,8,2]},index=[2,0,1,3])
print(df)
print('------------')
df1 = df.sort_values(by='b',axis=0)
print(df1)
print('--------------')
# 多列排序
df2 = df.sort_values(by=['b','a'],axis=0,ascending=[False,True])
print(df2)
b a c
2 1 4 1
0 2 3 3
1 3 2 8
3 2 1 2
------------
b a c
2 1 4 1
0 2 3 3
3 2 1 2
1 3 2 8
--------------
b a c
1 3 2 8
3 2 1 2
0 2 3 3
2 1 4 1
2)按索引排序
sort_index函数
sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)
常用参数
axis:默认值0,0代表行索引排序,1代表按照列索引排序。
ascending:布尔型,True则升序
inplace:布尔型,是否用排序后的数据替换现有的数据
na_position:{‘first’, ‘last’}, 默认是‘last’,默认缺失值排在最后面。
# -*- coding: utf-8 -*-
import pandas as pd
df = pd.DataFrame({'b':[1,2,2,3],'a':[4,3,2,1],'c':[1,3,8,2]},index=[2,0,1,3])
print(df)
print('----------')
#默认按“行标签”升序排序
df1 = df.sort_index()
print(df1)
print('-------------')
#按“列标签”降排序
df2 = df.sort_index(axis=1,ascending=False)
print(df2)
b a c
2 1 4 1
0 2 3 3
1 2 2 8
3 3 1 2
----------
b a c
0 2 3 3
1 2 2 8
2 1 4 1
3 3 1 2
-------------
c b a
2 1 1 4
0 3 2 3
1 8 2 2
3 2 3 1