Python pandas DataFrame 行列使用常用操作

Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。本文主要介绍Python pandas 中DataFrame 行列处理的常用操作(行列切片、索引、添加、交换、删除和合并等操作),以及相关的示例代码。

1、DataFrame索引函数

df.iloc()括号中的参数可选:整数,整数列表,整数切片。df.loc()括号中的参数可选:标签,标签列表,标签切片。ixilocloc的结合。atloc作用类似,但用来读取某个元素,iat是iloc的作用差不多,也是用来读取某个元素。

例如,

"""
loc函数:基于`标签`选择数据
iloc函数:按`索引位置`选择数据
at函数:基于`标签`选择一个值
iat函数:基于`索引位置`选择一个值
"""
import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})

print("df:")
print(df)
print("df['c']-----------")
print(df['c'])
print("df:")
print(df)
print("df[0:2]-----------")
print(df[0:2])
print("df:")
print(df)
print("df[['b','c']]-----------")
print(df[["b","c"]])
print("df:")
print(df)
print("df.loc[1,:]-----------")
print(df.loc[1,:])
print("df:")
print(df)
print("df.loc[:,['b','c']]-----------")
print(df.loc[:,['b','c']])
print("df:")
print(df)
print("df.loc[0]-----------")
print(df.loc[0])
print("df:")
print(df)
print("df.loc[0:1, ['a', 'b', 'c']]-----------")
print(df.loc[0:1, ['a', 'b', 'c']])
print("df:")
print(df)
print("df.iloc[1]-----------")
print(df.iloc[1]) # 整数位置选择
print("df:")
print(df)
print("df.iloc[1:3, :]-----------")
print(df.iloc[1:3, :]) # 整数位置选择
print("df:")
print(df)
print("df.iloc[2:3,0:2]-----------")
print(df.iloc[2:3,0:2]) #整数切片
print("df:")
print(df)
print("df.iloc[[1, 2, 4], [0, 2]]-----------")
print(df.iloc[[0, 2], [0, 2]]) # 整数列表按位置切片
print("df:")
print(df)
print("df.iloc[:, 1:3]-----------")
print(df.iloc[:, 1:3])
print("df:")
print(df)
print("df.iloc[1, 1]-----------")
print(df.iloc[1, 1])
print("df:")
print(df)
print("df.at[2, 'a']-----------")
print(df.at[2, 'a'])
print("df:")
print(df)
print("df.iat[1, 1]-----------")
print(df.iat[1, 1])
print("df:")
print(df)
print("df[df.b>2]-----------")
print(df[df.b>2])

相关文档:

Python pandas.DataFrame.iloc函数方法的使用

Python pandas.DataFrame.loc函数方法的使用

Python pandas dataframe iloc 和 loc 的用法及区别

Python pandas.DataFrame.at函数方法的使用

Python pandas.DataFrame.iat函数方法的使用

2、行操作

1)选择指定行

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
print(df.loc[1,:])

2)选择多行

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
print(df.loc[1:2,:])#选择1:2行,slice为1
print(df.loc[::-1,:])#选择所有行,slice为-1,所以为倒序
print(df.loc[0:2:2,:])#选择0至2行,slice为2,等同于print(df.loc[0:2:2,:])因为只有3行

3)添加行

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
df.loc[3,:]=4
print(df)

4)交换行

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
df.loc[[1,2],:]=df.loc[[2,1],:].values
print(df)

5)删除行

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
df.drop(0,axis=0,inplace=True)
print(df)

3、列操作

1)更改列名

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
df.columns = df.columns.str.strip() # 把columns当成series看待
df.columns = df.columns.map(lambda x:x) # 使用map函数
df.rename(columns={'b':'cjavapy'}, inplace=True)
print(df)

2)选择指定列

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
print(df.loc[:,"a"])

3)选择多列

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
print(df.loc[:,"a":"b"])

4)添加列

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
df.loc[:,"d"]=4
print(df)

注意:如果对已有的列,则是赋值。

5)交换两列的值

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
df.loc[:,['b', 'a']] = df.loc[:,['a', 'b']].values
print(df)

6)删除列

import pandas as pd

df = pd.DataFrame({'a':["A","B","C"], 'b': [1, 2, 3],'c':  ['a', 'b', 'c']})
del df['b'] #DF.drop('b', 1);#df.drop('b',axis=1, inplace=True)
print(df)

5、行列的合并

1)合并行

import pandas as pd

df = pd.DataFrame({'Name': ['apple','banana','cherry',' ', 'grape', 'orange', 'pineapple','']})
m = df['Name'].str.contains('\w+')
df = df[m].groupby((~m).cumsum(), as_index=False).agg(', '.join)
print (df)

2)合并列

import pandas as pd
import numpy as np
 
df = pd.DataFrame(data={'语文':[50,90,70,78,60],
                        '数学':[59,80,60,75,69],
                        '英语':[61,95,65,80,59]},
                  index=['Harry','Andy','Rita','Lee','Jack'])
# 添加'总分'字段
df['总分'] = df['语文'] + df['数学'] + df['英语']
# 调用np.where
# 添加'语文评级','数学评级','英语评级'字段
df['语文评级'] = np.where(df['语文'] > 60,'√','×')
df['数学评级'] = np.where(df['数学'] > 60,'√','×')
df['英语评级'] = np.where(df['英语'] > 60,'√','×')
# 将多列合并为一列,生成'评级合并'字段
df['评级合并'] = df['语文评级'].map(str) + df['数学评级'].map(str) + df['英语评级'].map(str)

相关文档:

Python pandas.DataFrame.iloc函数方法的使用

Python pandas.DataFrame.loc函数方法的使用

Python pandas dataframe iloc 和 loc 的用法及区别

Python pandas.DataFrame.at函数方法的使用

Python pandas.DataFrame.iat函数方法的使用

Python pandas.DataFrame.drop函数方法的使用

Python pandas.DataFrame.where函数方法的使用

推荐阅读
cjavapy编程之路首页