本文从读取数据到操作全部包含,你可以通过刷题的方式来完整学习pandas中数据处理的各种方法。
阅读路线
准备工作
生成对象
索引
选择需要的数据
运算
合并(Merge)
分组(Grouping)
重塑(Reshaping)
数据透视表(Pivot Tables)
pandas DataFrame里的操作
一、准备工作
import numpy as np
import pandas as pd
在进行下面的题目操作时,一定要先导入上面的两个数据分析包pandas、numpy
二、生成对象
1. 如何用Python的列表创建一个series?
s = pd.Series([1, 3, 5, np.nan, 6, 8])
输出:
![8d76d1af61712bea159b77a0dac3d041.png](https://img-blog.csdnimg.cn/img_convert/8d76d1af61712bea159b77a0dac3d041.png)
一个series是一个一维的标记数组,可以容纳任何数据类型(整数、字符串、浮点数、Python对象等)。必须记住,与Python列表不同,一个series总是包含相同类型的数据。
2.如何使用列表创建一个DataFrame?
# 导入pandas
import pandas as pd
# 字符串列表
lst = ["Gamer47","Shox","Simple"]
# 在列表中调用DataFrame构造函数
df = pd.DataFrame(lst)
输出:
![f851e0a3f0e31c3c2f3e021d1eaf5cf5.png](https://img-blog.csdnimg.cn/img_convert/f851e0a3f0e31c3c2f3e021d1eaf5cf5.png)
3.如何使用Series 字典对象生成 DataFrame?
df2 = pd.DataFrame({'A': 1.,
'B': pd.Timestamp('20130102'),
'C': pd.Series(1, index=list(range(4)), dtype='float32'),
'D': np.array([3] * 4, dtype='int32'),
'E': pd.Categorical(["test", "train", "test", "train"]),
'F': 'foo'})
输出:
![3d16a2a6f1068124e56b79145dfed8d0.png](https://img-blog.csdnimg.cn/img_convert/3d16a2a6f1068124e56b79145dfed8d0.png)
4.如何在pandas中创建一个空的DataFrame?要创建一个完全空的pandas dataframe,我们使用以下操作:
import pandas as pd
df = pd.DataFrame()
输出:
![98808bced61d2073ac172be8dc120e39.png](https://img-blog.csdnimg.cn/img_convert/98808bced61d2073ac172be8dc120e39.png)
已知有这样的数据,如何进行查看
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
输出:
![3495fa591ed3a453512aec2c843172a1.png](https://img-blog.csdnimg.cn/img_convert/3495fa591ed3a453512aec2c843172a1.png)
![7d66999e5af103978868c97c2365e97d.png](https://img-blog.csdnimg.cn/img_convert/7d66999e5af103978868c97c2365e97d.png)
2.如何查看尾部数据?
![060530c822127913262d72fd785467ff.png](https://img-blog.csdnimg.cn/img_convert/060530c822127913262d72fd785467ff.png)
3.如何快速查看数据的统计摘要?
![0046b6e0626d2581b526df18e79dae2e.png](https://img-blog.csdnimg.cn/img_convert/0046b6e0626d2581b526df18e79dae2e.png)
4.如何查询索引和列名?
![96c60b7a9033f2468e1d945c906388b2.png](https://img-blog.csdnimg.cn/img_convert/96c60b7a9033f2468e1d945c906388b2.png)
四.索引
1.简述Pandas Index在panda中建立索引意味着简单地从DataFrame中选择特定的数据行和列。
pandas支持四种类型的多轴索引,它们是:
Dataframe.[ ] 此函数称为索引运算符
Dataframe.loc[ ] : 此函数用于标签
Dataframe.iloc[ ] : 此函数用于基于位置或整数的
Dataframe.ix[] : 此函数用于基于标签和整数的
它们统称为索引器。这些是迄今为止索引数据最常见的方法。这四个函数有助于从DataFrame获取元素、行和列。
2.Pandas 定义重新索引(Reindexing)重新索引会更改DataFrame的行标签和列标签。重新索引意味着使数据符合特定轴上给定的一组标签。
多个操作可以通过像这样的索引来完成:
重新排序现有数据以匹配一组新的标签。
在不存在标签数据的标签位置插入缺失值(NA)标记。
import pandas as pd
import numpy as np
N=20
df = pd.DataFrame({
'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
'x': np.linspace(0,stop=N-1,num=N),
'y': np.random.rand(N),
'C': np.random.choice(['Low','Medium','High'],N).tolist(),
'D': np.random.normal(100, 10, size=(N)).tolist()
})
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
print (df_reindexed)
输出:
![024145768b0020a95c3aebc670fd5978.png](https://img-blog.csdnimg.cn/img_convert/024145768b0020a95c3aebc670fd5978.png)
3.如何设置索引?
panda set_index()是一种将列表、序列或dataframe设置为dataframe索引的方法。
语法:DataFrame.set_index(keys, inplace=False)
参数:
keys:列标签或列标签/数组列表,需要设置为索引的列
inplace:默认为False,适当修改DataFrame(不要创建新对象)
改变索引列:在本例中,名称列被用作DataFrame的索引列
import pandas as pd
#就是读取csv文本文件到DataFrame变量中
data = pd.read_csv("employees.csv")
data.set_index("First Name", inplace = True)
#观察数据
data.head()
输出:如输出图像所示,以前索引列是一系列数字Before Operation –
![73682e059fa7267f9ba20b04682fa2a4.png](https://img-blog.csdnimg.cn/img_convert/73682e059fa7267f9ba20b04682fa2a4.png)
data.set_index("First Name", inplace = True)
#观察改变索引列后的数据
data.head()
After Operation
![44a0818699546195e96a4a664e85a117.png](https://img-blog.csdnimg.cn/img_convert/44a0818699546195e96a4a664e85a117.png)
4.如何重置索引?Pandas Series.reset_index()函数的作用是:生成一个新的DataFrame或带有重置索引的Series。
例1: 使用 Series.reset_index() 函数重置给定Series对象的索引
# 导入pandas包
import pandas as pd
# 创建 Series
sr = pd.Series([10, 25, 3, 11, 24, 6])
# 创建索引
index_ = ['Coca Cola', 'Sprite', 'Coke', 'Fanta', 'Dew', 'ThumbsUp']
# 设置索引
sr.index = index_
# 打印series
print(sr)
输出:
![06ffc0e97eaa5604dba8a7ada6a5a84d.png](https://img-blog.csdnimg.cn/img_convert/06ffc0e97eaa5604dba8a7ada6a5a84d.png)
现在,我们将使用Series.reset_index()函数来重置给定的series对象的索引
# 重置索引
result = sr.reset_index()
# 打印
print(result)
输出 :
![2044afaf12f5d4907182ad57435c6d6c.png](https://img-blog.csdnimg.cn/img_convert/2044afaf12f5d4907182ad57435c6d6c.png)
从输出中可以看到,该 Series.reset_index() 函数已将给定Series对象的索引重置为默认值。它保留了索引,并将其转换为列。
五、选择需要的数据
1.获取数据
1.1先创建数据:
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
![b9f6e0c716c9e4102d8e96bc8c8afd51.png](https://img-blog.csdnimg.cn/img_convert/b9f6e0c716c9e4102d8e96bc8c8afd51.png)
1.2选择单列,产生 Series:
![05a7a58b59a45a3c2fc01838ad36b088.png](https://img-blog.csdnimg.cn/img_convert/05a7a58b59a45a3c2fc01838ad36b088.png)
![a0423bc7085d54667a0957bf64290873.png](https://img-blog.csdnimg.cn/img_convert/a0423bc7085d54667a0957bf64290873.png)
![93318618590d05213c20b277fbf98b9a.png](https://img-blog.csdnimg.cn/img_convert/93318618590d05213c20b277fbf98b9a.png)
2.按标签选择
详见按标签选择:
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-label
2.1用标签提取一行数据:
![cf3566d2cc006944401866479485cc13.png](https://img-blog.csdnimg.cn/img_convert/cf3566d2cc006944401866479485cc13.png)
![aa1072073d3cebc83a136efa3f46c8c2.png](https://img-blog.csdnimg.cn/img_convert/aa1072073d3cebc83a136efa3f46c8c2.png)
![184389635543b85505d45e62abc77003.png](https://img-blog.csdnimg.cn/img_convert/184389635543b85505d45e62abc77003.png)
![860a48df0b7fad3c81e704c423ea2383.png](https://img-blog.csdnimg.cn/img_convert/860a48df0b7fad3c81e704c423ea2383.png)
![c487e388cd82a4e6bc1f8f59b948a403.png](https://img-blog.csdnimg.cn/img_convert/c487e388cd82a4e6bc1f8f59b948a403.png)
![02fa1fd3b635957da3deb5cc48a288b4.png](https://img-blog.csdnimg.cn/img_convert/02fa1fd3b635957da3deb5cc48a288b4.png)
3.按位置选择
详见按标签选择:
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-lab
3.1用整数位置选择:
![3621c054c1064f6f4d2953d0782baa96.png](https://img-blog.csdnimg.cn/img_convert/3621c054c1064f6f4d2953d0782baa96.png)
![3bc9ce51a0030c452bab703b93dbe01e.png](https://img-blog.csdnimg.cn/img_convert/3bc9ce51a0030c452bab703b93dbe01e.png)
![9c21c832dbca899f714fb559277a3e54.png](https://img-blog.csdnimg.cn/img_convert/9c21c832dbca899f714fb559277a3e54.png)
![6b9194d2f81d38fc3c468aecac2e2b60.png](https://img-blog.csdnimg.cn/img_convert/6b9194d2f81d38fc3c468aecac2e2b60.png)
![971dc5af951009d0854b6011dd7ceaa0.png](https://img-blog.csdnimg.cn/img_convert/971dc5af951009d0854b6011dd7ceaa0.png)
![f6e1f71a8251e9e618c984c0812de708.png](https://img-blog.csdnimg.cn/img_convert/f6e1f71a8251e9e618c984c0812de708.png)
![21837e2a48a099ebef8d3336db084d31.png](https://img-blog.csdnimg.cn/img_convert/21837e2a48a099ebef8d3336db084d31.png)
4.布尔索引
4.1用单列的值选择数据:
![f154673f87e0ac2f83bcaeaa8e2d324b.png](https://img-blog.csdnimg.cn/img_convert/f154673f87e0ac2f83bcaeaa8e2d324b.png)
![64eb09c22b4339a9af8c8a82daf3a72b.png](https://img-blog.csdnimg.cn/img_convert/64eb09c22b4339a9af8c8a82daf3a72b.png)
![4fd0a8eb580a5324c96d1482d0d7a488.png](https://img-blog.csdnimg.cn/img_convert/4fd0a8eb580a5324c96d1482d0d7a488.png)
5.赋值
5.1用索引自动对齐新增列的数据:
![061705948287a4feb96f7ac95842de80.png](https://img-blog.csdnimg.cn/img_convert/061705948287a4feb96f7ac95842de80.png)
![db8c05c32188fb18e75721c64600317b.png](https://img-blog.csdnimg.cn/img_convert/db8c05c32188fb18e75721c64600317b.png)
![d503820525857da4fa41064954406589.png](https://img-blog.csdnimg.cn/img_convert/d503820525857da4fa41064954406589.png)
![6afd049bdd6e76f5945e6ea1a6aa5ad8.png](https://img-blog.csdnimg.cn/img_convert/6afd049bdd6e76f5945e6ea1a6aa5ad8.png)
![f968a6cb58c03cf784e87977397ba759.png](https://img-blog.csdnimg.cn/img_convert/f968a6cb58c03cf784e87977397ba759.png)
![fc0407add9764b7641e86fcd91cc5f9f.png](https://img-blog.csdnimg.cn/img_convert/fc0407add9764b7641e86fcd91cc5f9f.png)
![2867e9c2d50a22cb069fc870fd239ce5.png](https://img-blog.csdnimg.cn/img_convert/2867e9c2d50a22cb069fc870fd239ce5.png)
六.运算
1.如何得到一个数列的最小值、第25百分位、中值、第75位和最大值?
import pandas as pd
import numpy as np
from numpy import percentile
p = pd.Series(np.random.normal(14, 6, 22))
state = np.random.RandomState(120)
p = pd.Series(state.normal(14, 6, 22))
print(percentile(p, q=[0, 25, 50, 75, 100]))
输出:
![0669f5fff660acfefb7aaa67bfd1d4fa.png](https://img-blog.csdnimg.cn/img_convert/0669f5fff660acfefb7aaa67bfd1d4fa.png)
Pandas dataframe.mean(axis=None)函数返回所请求轴(axis=0代表对列进行求平均值,axis=1代表对行进行求平均值)的值的平均值。
示例:使用 mean() 函数查找索引轴上所有观测值的平均值。
import pandas as pd
df = pd.DataFrame({"A":[12, 4, 5, 44, 1],
"B":[5, 2, 54, 3, 2],
"C":[20, 16, 7, 3, 8],
"D":[14, 3, 17, 2, 6]})
df
输出:
![5651bd4435d651ba2b9825d8908ec3bb.png](https://img-blog.csdnimg.cn/img_convert/5651bd4435d651ba2b9825d8908ec3bb.png)
让我们使用datafame .mean()函数来查找索引轴上的平均值。
![5cbe4fa5f348e8704313b846ba4d1044.png](https://img-blog.csdnimg.cn/img_convert/5cbe4fa5f348e8704313b846ba4d1044.png)
3.如何将函数应用到DataFrame中的每个数据元素?可以使用 apply() 函数以便将函数应用于给定dataframe中的每一行。让我们来看看我们完成这项任务的方式。
实例:
import pandas as pd
def add(a, b, c):
return a + b + c
def main():
data = {
'A':[1, 2, 3],
'B':[4, 5, 6],
'C':[7, 8, 9] }
df = pd.DataFrame(data)
print("Original DataFrame:\n", df)
df['add'] = df.apply(lambda row : add(row['A'],
row['B'], row['C']), axis = 1)
print('\nAfter Applying Function: ')
print(df)
if __name__ == '__main__':
main()
输出:
![d300ee1ee685d685d78f20eeb611851f.png](https://img-blog.csdnimg.cn/img_convert/d300ee1ee685d685d78f20eeb611851f.png)
import numpy as np
raw_data = {'name': ['Willard Morris', 'Al Jennings', 'Omar Mullins', 'Spencer McDaniel'],
'age': [20, 19, 22, 21],
'favorite_color': ['blue', 'red', 'yellow', "green"],
'grade': [88, 92, 95, 70]}
df = pd.DataFrame(raw_data, columns = ['name', 'age', 'favorite_color', 'grade'])
输出:
![74cfcda8b743bffcef913d3abf9d0ae1.png](https://img-blog.csdnimg.cn/img_convert/74cfcda8b743bffcef913d3abf9d0ae1.png)
获取df的行和列计数:
df.shape
输出:
![ffa4faca7bcc155808e5eb30830b6448.png](https://img-blog.csdnimg.cn/img_convert/ffa4faca7bcc155808e5eb30830b6448.png)
5.如何在panda DataFrame中获得列值的总和?Pandas dataframe.sum()函数返回所请求轴的值的和
语法: DataFrame.sum(axis=None, skipna=None, )
参数:
axis : {index (0), columns (1)},axis=0代表对列进行求和,axis=1代表对行进行求和
skipna : 计算结果时排除NA /空值
示例1:使用 sum() 函数查找索引轴上所有值的总和
#导入数据
import pandas as pd
df = pd.read_csv("NBAPlayers.txt",delimiter="\t")
现在求出沿索引轴的所有值的和。我们将跳过计算和时的NaN值。
# 查找索引轴的和,默认情况下,轴设置为0
df.sum(axis = 0, skipna = True)
输出:
![07e89681f657a759999a2ce6ac80f5b1.png](https://img-blog.csdnimg.cn/img_convert/07e89681f657a759999a2ce6ac80f5b1.png)
https://pan.baidu.com/s/1vAUxFlNizVTYH03j-O-VVg
提取码:ykbo
七.合并
如何将新行追加到pandas DataFrame?Pandas dataframe.append()函数的作用是:将其他dataframe的行追加到给定的dataframe的末尾,返回一个新的dataframe对象。
语法:DataFrame.append( ignore_index=False,)
参数:
ignore_index : 如果为真,就不要使用索引标签
示例1: 创建两个数据框,然后将第二个附加到第一个。
importpandas as pd
# 使用dictionary创建第一个Dataframe
df1 =df =pd.DataFrame({"a":[1, 2, 3, 4],
"b":[5, 6, 7, 8]})
# 使用dictionary创建第二个Dataframe
df2 =pd.DataFrame({"a":[1, 2, 3],
"b":[5, 6, 7]})
现在将df2附加到df1的末尾
df1.append(df2)
输出:
![c628271efb859f1e2a72e0af2d049cd5.png](https://img-blog.csdnimg.cn/img_convert/c628271efb859f1e2a72e0af2d049cd5.png)
请注意,第二个DataFrame的索引值保留在附加的DataFrame中。如果我们不希望发生这种情况,则可以设置ignore_index = True。
df.append(df2, ignore_index = True)
输出 :
![30eaa5fcddecb8e00e3b9720272864da.png](https://img-blog.csdnimg.cn/img_convert/30eaa5fcddecb8e00e3b9720272864da.png)
八.分组(Grouping)
“group by” 指的是涵盖下列一项或多项步骤的处理流程:
分割:按条件把数据分割成多组;
应用:为每组单独应用函数;
组合:将处理结果组合成一个数据结构。
详见分组:
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})
df
输出:
![6ffd7e63ec202ca86b96bd5da0f1ee1a.png](https://img-blog.csdnimg.cn/img_convert/6ffd7e63ec202ca86b96bd5da0f1ee1a.png)
1.先分组,再用 sum()
函数计算每组的汇总数据:
df.groupby('A').sum()
输出:
![3b13a350624b1c90815eb4cd8f36a63f.png](https://img-blog.csdnimg.cn/img_convert/3b13a350624b1c90815eb4cd8f36a63f.png)
2.多列分组后,生成多层索引,也可以应用 sum 函数:
df.groupby(['A', 'B']).sum()
输出:
![41768cdec004cd5e30b7cc13e03c414f.png](https://img-blog.csdnimg.cn/img_convert/41768cdec004cd5e30b7cc13e03c414f.png)
九.重塑(Reshaping)
如何将numpy数组转换为给定形状的DataFrame?
import pandas as pd
import numpy as np
p = pd.Series(np.random.randint(1, 7, 8))
输出:
![a7bbadb04baac13741d750296b909398.png](https://img-blog.csdnimg.cn/img_convert/a7bbadb04baac13741d750296b909398.png)
info = pd.DataFrame(p.values.reshape(2,4))
输出:
![674e32e88af908ea11c567bb0f27120e.png](https://img-blog.csdnimg.cn/img_convert/674e32e88af908ea11c567bb0f27120e.png)
十.数据透视表
透视表是一种可以对数据动态排布并且分类汇总的表格格式,在pandas中它被称作pivot_table。pivot_table(data, values=None, index=None, columns=None)参数:
Index: 就是层次字段,要通过透视表获取什么信息就按照相应的顺序设置字段
Values: 可以对需要的计算数据进行筛选
Columns: 类似Index可以设置列层次字段,它不是一个必要参数,作为一种分割数据的可选方式。
详见数据透视表:
https://pandas.pydata.org/pandas-docs/stable/user_guide/reshaping.html#reshaping-pivot
"With a Title"
数据透视表代码:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3,
'B': ['A', 'B', 'C'] * 4,
'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
'D': np.random.randn(12),
'E': np.random.randn(12)})
打印输出:
![2d27a9c35450ea6c2a86fc53b477f432.png](https://img-blog.csdnimg.cn/img_convert/2d27a9c35450ea6c2a86fc53b477f432.png)
用上述数据生成数据透视表非常简单:
pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
返回结果:
![1591b469004db82ea63e11195508e055.png](https://img-blog.csdnimg.cn/img_convert/1591b469004db82ea63e11195508e055.png)
十一.panda DataFrame里的操作
1.如何将列添加到pandas DataFrame?源数据:
#导入pandas
import pandas as pd
# 定义一个包含学生数据的字典
data = {"Name": ["Jai","Princi", "Gaurav" ,"Anuj"],
"Height": [5.1, 6.2, 5.1, 5.2],
"Qualification": ["Msc", "Ma","Msc", "Msc"]}
# 将字典转换成DataFrame
df = pd.DataFrame(data)
输出:
![5f8cf00b328311e0345f1224e457308d.png](https://img-blog.csdnimg.cn/img_convert/5f8cf00b328311e0345f1224e457308d.png)
# 声明要转换为列的列表
address = ["Delhi", "Bangalore", "Chennai" ,"Patna"]
# 使用“address”作为列名
df["Address"] = address
# 观察结果
df
输出:
![1b65a2f837428191d142af44c9e0b4c6.png](https://img-blog.csdnimg.cn/img_convert/1b65a2f837428191d142af44c9e0b4c6.png)
2.如何向panda DataFrame添加索引、行或列?
向DataFrame添加索引如果您创建了一个DataFrame, panda允许将输入添加到索引参数中。它将确保您拥有所需的索引。否则,在默认情况下,DataFrame包含一个数值索引,该索引从0开始,在DataFrame的最后一行结束。
向DataFrame添加行、列
我们可以使用.loc、iloc和ix将行、列插入到DataFrame中。
添加具有特定索引名的行:
import pandas as pd
employees = pd.DataFrame(
data={'Name': ['John Doe', 'William Spark'],
'Occupation': ['Chemist', 'Statistician'],
'Date Of Join': ['2018-01-25', '2018-01-26'],
'Age': [23, 24]},
index=['Emp001', 'Emp002'],
columns=['Name', 'Occupation', 'Date Of Join', 'Age'])
print("\n------------ BEFORE ----------------\n")
print(employees)
employees.loc['Emp003'] = ['Sunny', 'Programmer', '2018-01-25', 45]
print("\n------------ AFTER ----------------\n")
print(employees)
输出:
![aa63f25701bec490b51bd3d3a5a83c7d.png](https://img-blog.csdnimg.cn/img_convert/aa63f25701bec490b51bd3d3a5a83c7d.png)
3.如何在panda DataFrame上进行迭代?您可以通过结合使用for循环和对DataFrame的iterrows()调用来遍历DataFrame的行。
import pandas as pd
import numpy as np
df = pd.DataFrame([{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}])
for index, row in df.iterrows():
print(row['c1'], row['c2'])
输出:
![3f6a7ee6d0f4e83f929feac4ef6cab3e.png](https://img-blog.csdnimg.cn/img_convert/3f6a7ee6d0f4e83f929feac4ef6cab3e.png)
4.我们如何排序DataFrame?我们可以通过以下几种有效地在DataFrame中执行排序:
(1) 按标签可以使用sort_index()方法对数据dataframe进行排序。可以通过传递axis参数和排序顺序来实现。默认情况下,按升序对行标签进行排序。
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],
columns = ['col2','col1'])
sorted_df=unsorted_df.sort_index()
print (sorted_df)
输出:
![12e26216a7b4f0fedfd2811133e91638.png](https://img-blog.csdnimg.cn/img_convert/12e26216a7b4f0fedfd2811133e91638.png)
排序顺序通过将布尔值传递给升序参数,可以控制排序的顺序。让我们考虑下面的例子来理解这个问题
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = ['col2','col1'])
sorted_df = unsorted_df.sort_index(ascending=False)
print(sorted_df)
输出:
![7ddb09e7b92d5c5bc1c8241da64c0359.png](https://img-blog.csdnimg.cn/img_convert/7ddb09e7b92d5c5bc1c8241da64c0359.png)
对列进行排序通过传递值1的axis参数,可以对列标签进行排序,让我们考虑下面的例子来理解这个问题。
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame(np.random.randn(10, 2), index=[1, 4, 6, 2, 3, 5, 9, 8, 0, 7], columns = ['col2', 'col1'])
sorted_df = unsorted_df.sort_index(axis=1)
print(sorted_df)
输出:
![dd9dbf0202717bbffd0dc0c1d844c3f6.png](https://img-blog.csdnimg.cn/img_convert/dd9dbf0202717bbffd0dc0c1d844c3f6.png)
(2) 按照实际值DataFrame.sort_values(by, axis=0, ascending=True, inplace=False)sort_values提供了一个功能,我们可以在其中指定要排序的值的DataFrame列名。它是通过传递“by”参数来完成的。
参数解析:
axis:{0 or ‘index’, 1 or ‘columns’}, default 0,默认按照索引排序,即纵向排序,如果为1,则是横向排序
by:如果axis=0,那么by="列名";如果axis=1,那么by="行名";
ascending:布尔型,True则升序,可以是[True,False],即第一字段升序,第二个降序
inplace:布尔型,是否用排序后的数据框替换现有的数据框
import numpy as np
import pandas as pd
from pandas import DataFrame
data=[["a",2,301],["b",1,201],["c",2,201],["d",1,301],["e",2,301]]
df=pd.DataFrame(data,columns=["A","B","C"])
查看源数据:
![3a18c1393e560a595517fcb181aa87b1.png](https://img-blog.csdnimg.cn/img_convert/3a18c1393e560a595517fcb181aa87b1.png)
df.sort_values(by=["C","B"],ascending=[False,True],inplace=True)
输出:
![e70452c615d175da4d0a0c38f769c20f.png](https://img-blog.csdnimg.cn/img_convert/e70452c615d175da4d0a0c38f769c20f.png)
data_1=[[300,2,301],[2,1,201],[3,300,201],[100,1,301],[500,2,301]]
df_1=pd.DataFrame(data_1,columns=["A","B","C"])
输出:
![041afb03a007d38780fd975019c2ef38.png](https://img-blog.csdnimg.cn/img_convert/041afb03a007d38780fd975019c2ef38.png)
df_1.sort_values(by=0,axis=1,inplace=True)
输出:
![d62f0898b43e5f6ed7d929ef1ddbf681.png](https://img-blog.csdnimg.cn/img_convert/d62f0898b43e5f6ed7d929ef1ddbf681.png)
7.如何删除panda DataFrame中的行?
import pandas as pd
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'year': [2012, 2012, 2013, 2014, 2014],
'reports': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
df
输出:
![6e21686236b03747a7b2b911178e182b.png](https://img-blog.csdnimg.cn/img_convert/6e21686236b03747a7b2b911178e182b.png)
删除行
df.drop(['Cochice', 'Pima'])
输出 :
![1108f038bb34288ec42b1ba8052d75bc.png](https://img-blog.csdnimg.cn/img_convert/1108f038bb34288ec42b1ba8052d75bc.png)
test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'math':[90,89,99,78,97,93],'english':[89,94,80,94,94,90]}
#直接写入参数test_dict
test_dict_df = pd.DataFrame(test_dict)
#字典型赋值
test_dict_df = pd.DataFrame(data=test_dict)
test_dict_df
输出:
![3de0ca729d8d0703f54a8f1e551861bf.png](https://img-blog.csdnimg.cn/img_convert/3de0ca729d8d0703f54a8f1e551861bf.png)
test_dict_df.drop(['id'],axis=1)
输出:
![8c13dcdc6285df794906218b5e3e6db8.png](https://img-blog.csdnimg.cn/img_convert/8c13dcdc6285df794906218b5e3e6db8.png)
![d43aa19eb4801a1505df7361b1640b30.gif](https://img-blog.csdnimg.cn/img_convert/d43aa19eb4801a1505df7361b1640b30.gif)